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

cre*_*gox 2 c# access-modifiers getter-setter

我现在就是这样做的:

protected bool __myMember = true;
bool myMember { public get { return __myMember; } protected set { __myMember = value; } }
Run Code Online (Sandbox Code Playgroud)

这是我理想的做法(或非常类似的东西):

public-get protected-set bool myMember = true;
Run Code Online (Sandbox Code Playgroud)

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

也许解决方案是如果我们可以在csharp中创建修饰符......但我怀疑我们可以.

Ste*_*eve 5

只是

public bool myMember { get; protected set; }
Run Code Online (Sandbox Code Playgroud)

无需添加支持字段.

实际上,支持领域仍然存在.它只是由编译器直接隐藏和处理,正如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
Run Code Online (Sandbox Code Playgroud)

  • 不要忘记您始终可以在构造函数中初始化属性.实际上,当你有自初始化字段时,生成的IL会在构造函数中运行代码 (3认同)