像这样:
public String text {get; set{
// here comes some setter checking / setter logic
// finally assign the value to the var without using the setter
<is_there_a_"without_setter"_keyword?> text = value;
}
}
答案 0 :(得分:3)
没有办法做到这一点
答案 1 :(得分:2)
没有。该属性是用于控制对私有支持字段的访问的公开接口(不是C#interface
)。 C#3中引入的特殊语法就是所谓的“语法糖” - 编译器实际上将它变成了一个私有字段,你从来没有看到过get / set属性来访问它。
编辑:属性本身不存储数据。它们只是控制对存储在别处的数据的访问,其中一个常见的情况是在私有领域。
另一个编辑:这是我所指的糖语法:
// When this is compiled, it actually creates a private
// field for you, which the property accesses.
public int MyProperty
{
get;
set;
}
答案 2 :(得分:1)
如果为setter定义自定义代码,无论多么简单,那么如果需要,还必须定义get方法
如果不编写此自定义代码,您可以走得更远
public String text {get; protected set}
只允许在您的类及其后代中进行公共读取访问和修改
答案 3 :(得分:0)
当您要应用自定义逻辑时,无法执行此操作。如果您有一个简单的属性,您可以这样做:
public int Foo { get; set; }
您还可以设置每个的可见性:
public int Foo { get; private set; }
答案 4 :(得分:0)
对于未定义支持字段的属性,您不能这样做。定义此类属性时,C#编译器会在MSIL中生成名为private
的{{1}}字段。正如其他海报所指出的,最多可以调整属性上的访问修饰符。
关于这一点也有一些规则,主要是常识:
<PropertyName>k_BackingField
和get
上的访问控制只能比属性更具限制性。即,您不能拥有私人PropertyName并为其指定set
public
或get
。set
时,您无法确定get
和set
为private
。最多一个属性可以是public
。 但是,这是C#编译器提供的所有合成糖。您可以自己提供支持字段,并提供属性的get和set实现。您可以选择制作支持字段private
。
为两种情况生成的MSIL代码只有细微差别(生成的支持字段包含public
属性。生成的System.Runtime.CompilerServices.CompilerGeneratedAttribute
和get
方法也是如此)< / p>