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 回答