2009-07-30 61 views

回答

3

没有没有办法做到这一点

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; 
} 
1

如果您的二传手定义自定义代码,但是简单的,则还必须,如果你想它

定义get方法

你可以不写这个自定义代码的父亲是

public String text {get; protected set} 

只允许类中的公共读取权限和modifiction及其后代

0

当您应用自定义逻辑时,没有办法做到这一点。如果你有一个简单的属性,你可以这样做:

public int Foo { get; set; } 

您还可以设置每个能见度:

public int Foo { get; private set; } 
0

你不能这样做,对于一个物业,你不定义支持字段。定义这样一个属性时,C#编译器会在MSIL中生成名称为<PropertyName>k_BackingFieldprivate字段。正如其他海报所指出的,至多你可以调整属性上的访问修饰符。

有关于太一些规则,基本都是常识:

  • 访问控制上getset只能是比财产更严格。即您不能拥有私有财产名称并给它一个publicgetset
  • 当属性为public时,您无法将getset确定为private。至多有一个属性可以是private

但是,这是C#编译器提供的所有synthy糖。您可以自己提供支持字段,并提供您的获取和设置属性的实现。您可以选择制作背景字段public

这两种情况下生成的MSIL代码只有很小的差别(生成的后台字段包含System.Runtime.CompilerServices.CompilerGeneratedAttribute属性。生成的getset方法也是如此)