c# - 用于设置不同修饰符来获取/设置的一行代码

标签 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 中创建修饰符...但我怀疑我们可以。

最佳答案

简单

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/

相关文章:

java - protected 方法允许使用哪些访问修饰符

c# - 是否可以将一个颜色资源指向 Xamarin.Forms 中的另一个颜色资源?

c# - 将超过 255 个字符从 excel 导入到 sql server(上一个问题 - 如何使用 ssis 将文本限定 CSV 动态加载到 sql server)

c# - 获取和设置如何影响变量的分配?

c++ - setField() 中的类更改未保留

java - `public/protected/private` 关键字对性能有影响吗?

c# - 在派生类中将属性设置为只读

c# - varchar(max) + linq to sql

c# - 清除文本框时属性的值不会更改

Ruby attr_accessor 与 getter/setter 基准测试 : why is accessor faster?