C#,是否可以避免定义私有字段而仍然在公共字段上使用set/get?
像这样:C#,是否可以避免定义私有字段而仍然在公共字段上使用set/get?,c#,C#,像这样: 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; } } 公共字符串文本{get;set{ //下面是一
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;
}
}
公共字符串文本{get;set{
//下面是一些setter检查/setter逻辑
//最后,不使用setter将值分配给var
文本=值;
}
}
不,没有办法做到这一点不,没有办法做到这一点不。属性是用于控制对私有备份字段的访问的公开接口(不是C#接口
)。C#3中引入的特殊语法被称为“语法糖”——编译器实际上会将其转换为一个私有字段,您永远不会看到它,并使用get/set属性访问它
编辑:属性本身不存储数据。它们只是控制对存储在别处的数据的访问,其中一个常见情况是在私有字段中
另一个编辑:这是我指的sugar语法:
// When this is compiled, it actually creates a private
// field for you, which the property accesses.
public int MyProperty
{
get;
set;
}
否。该属性是用于控制对私有备份字段的访问的公开接口(不是C#接口
)。C#3中引入的特殊语法被称为“语法糖”——编译器实际上会将其转换为一个私有字段,您永远不会看到它,并使用get/set属性访问它
编辑:属性本身不存储数据。它们只是控制对存储在别处的数据的访问,其中一个常见情况是在私有字段中
另一个编辑:这是我指的sugar语法:
// When this is compiled, it actually creates a private
// field for you, which the property accesses.
public int MyProperty
{
get;
set;
}
如果为setter定义自定义代码,无论多么简单,如果需要,还必须定义get方法 如果不编写此自定义代码,则可以走得更远
public String text {get; protected set}
它只允许在类及其子类中进行公共读取访问和修改如果为setter定义自定义代码,无论多么简单,如果需要,还必须定义get方法 如果不编写此自定义代码,则可以走得更远
public String text {get; protected set}
它只允许在类及其子类中进行公共读取访问和修改,如果要应用自定义逻辑,则无法执行此操作。如果您有一个简单的属性,则可以执行以下操作:
public int Foo { get; set; }
您还可以设置以下各项的可见性:
public int Foo { get; private set; }
当您要应用自定义逻辑时,没有办法做到这一点。如果您有一个简单的属性,则可以执行以下操作:
public int Foo { get; set; }
您还可以设置以下各项的可见性:
public int Foo { get; private set; }
对于未定义支持字段的属性,不能执行此操作。定义此类属性时,C#编译器会在MSIL中生成一个名为
k#u BackingField
的private
字段。正如其他海报所指出的,最多可以调整属性上的访问修饰符
关于这一点也有一些规则,这些规则大多是常识:
- 对
和get
的访问控制只能比对属性的限制更严格。i、 e.您不能拥有私有PropertyName并为其指定一个set
public
或get
set
- 当属性为
时,不能将public
和get
都定义为set
。最多一个属性可以是private
李>private
公开
为这两种情况生成的MSIL代码只有一个微小的区别(生成的支持字段包括
System.Runtime.CompilerServices.CompilerGeneratedAttribute
属性。生成的get
和set
方法也是如此)对于未定义支持字段的属性,无法执行此操作。定义此类属性时,C#编译器会在MSIL中生成一个名为k#u BackingField
的private
字段。正如其他海报所指出的,最多可以调整属性上的访问修饰符
关于这一点也有一些规则,这些规则大多是常识:
- 对
和get
的访问控制只能比对属性的限制更严格。i、 e.您不能拥有私有PropertyName并为其指定一个set
public
或get
set
- 当属性为
时,不能将public
和get
都定义为set
。最多一个属性可以是private
李>private
公开
为这两种情况生成的MSIL代码只有一个微小的区别(生成的支持字段包括System.Runtime.CompilerServices.CompilerGeneratedAttribute
属性。生成的get
和set
方法也是如此)