以下是我现在的表现:
protected bool __myMember = true;
bool myMember { public get { return __myMember; } protected set { __myMember = value; } }
以下是我理想的做法(或类似的东西):
public-get protected-set bool myMember = true;
这可能吗?或者还有其他方法可以缩短我目前的工作方式吗?我应该不这样做吗?
如果我们可以在csharp中创建修饰符,可能会有一个解决方案...但我怀疑我们可以。
答案 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