这是我现在的做法:
protected bool __myMember = true;
bool myMember { public get { return __myMember; } protected set { __myMember = value; } }
这是我理想的做法(或非常类似的事情):
public-get protected-set bool myMember = true;
这可能吗?或者还有其他方法可以缩短我目前的做法吗?我应该不这样做吗?
也许解决方案是我们可以在 csharp 中创建修饰符...但我怀疑我们可以。
最佳答案
简单
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
关于c# - 用于设置不同修饰符来获取/设置的一行代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16973498/