2

これが私が今それを行う方法です:

protected bool __myMember = true;
bool myMember { public get { return __myMember; } protected set { __myMember = value; } }

これが私が理想的にそれをやりたい方法です(または非常に似たもの):

public-get protected-set bool myMember = true;

これは可能ですか?または、私が現在行っている方法を短縮する他の方法はありますか? 私はこれをやるべきではありませんか?

csharp で修飾子を作成できれば解決策になるかもしれませんが、できるとは思えません。

4

1 に答える 1

5

単に

public bool myMember { get; protected set; }

バッキング フィールドを追加する必要はありません。

実際には、バッキング フィールドはまだ存在します。このILの小さな部分が示すように、コンパイラによってのみ隠され、直接処理されます

void Main()
{
    myTest t = new myTest();
    Console.WriteLine(t.member);
}

class myTest
{
    public bool member {get; protected set;}
}


IL_0000:  newobj      UserQuery+myTest..ctor
IL_0005:  stloc.0     // t
IL_0006:  ldloc.0     // t
IL_0007:  callvirt    UserQuery+myTest.get_member
IL_000C:  call        System.Console.WriteLine

myTest.get_member:
IL_0000:  ldarg.0     
IL_0001:  ldfld       UserQuery+myTest.<member>k__BackingField
IL_0006:  ret         

myTest.set_member:
IL_0000:  ldarg.0     
IL_0001:  ldarg.1     
IL_0002:  stfld       UserQuery+myTest.<member>k__BackingField
IL_0007:  ret         

myTest..ctor:
IL_0000:  ldarg.0     
IL_0001:  call        System.Object..ctor
IL_0006:  ret
于 2013-06-06T22:47:56.583 に答える