属性从外部看起来像字段,但在内部它们包含逻辑。
一个属性被声明为一个字段,但是添加了一个get / set块。
以下是如何实现CurrentPrice作为属性:
public class Product {decimal currentPrice; // The private "backing" field public decimal CurrentPrice // The public property { get { return currentPrice; } set { currentPrice = value; } } }
get
和 set
是属性访问器。
读取属性时,get访问器运行。它必须返回属性类型的值。
在赋值属性时,集合访问器运行。
它有一个属性类型的名为value的隐式参数,通常分配给一个私有字段。
我们可以编写属性的代码来控制获取和设置其值。
属性允许以下修饰符:
项目 | 修饰符 |
---|---|
修饰符... | static |
访问修饰符 | public internal private protected |
继承修饰符 | new virtual abstract override sealed |
非托管代码修饰符 | unsafe extern |
如果属性仅指定get访问器,那么该属性是只读的。
如果一个属性只指定一个集合访问器,则该属性是只写的。
属性通常具有专用的备份字段以存储基础数据。
然而,也可以从其他数据计算属性。例如:
decimal currentPrice, sharesOwned; public decimal Worth { get { return currentPrice * sharesOwned; } }
自动属性声明指示编译器提供实现。
我们可以重新声明本节中的第一个示例如下:
public class Product { public decimal CurrentPrice { get; set; } }
编译器自动生成无法引用的编译器生成的名称的私有备用字段。
如果要将属性以只读方式公开给其他类型,则可以将集合访问器标记为private。
get和set访问器可以有不同的访问级别。
public class Product { private decimal x; public decimal X{ get { return x; } private set { x = Math.Round (value, 2); } } }
C# 装箱和拆箱对象类型 object 或 System.Object 是所有类型的最终基类。任何类型都可以upcast到对象。以下代码创建一个类Stack...
C#枚举枚举是一种特殊的值类型,是指定的数字常量组。例子例如:public enum Direction { Left, Right, Top, Bottom } 我们可以...
C#条件运算符和||运算符测试与和或条件。!运算符表示不。以下代码使用and,not和or运算符创建布尔表达式。!cloudy(WeekDay || ...