用于设置不同修改器以获取/设置的单行

时间:2013-06-06 22:46:38

标签: c# getter-setter access-modifiers

以下是我现在的表现:

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

以下是我理想的做法(或类似的东西):

public-get protected-set bool myMember = true;

这可能吗?或者还有其他方法可以缩短我目前的工作方式吗?我应该这样做吗?

如果我们可以在csharp中创建修饰符,可能会有一个解决方案...但我怀疑我们可以。

1 个答案:

答案 0 :(得分: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