c#中get和set不提倡把域的保护级别设为public,不安全。推荐使用属性来表达,属性不表示存储位置,这是其与域的根本性区别。
属性提供了只读(get)、只写(set)和读写(get和set)三种接口。
注意:声明的时候必须在同一个属性名下,不能分离。另外三种属性被认为是同一个属性名。
一般来说,get、set用public来修饰以起到公共接口的意义。另外还有abstract、virtual、override、sealed修饰符。
示例代码:
class MyClass
{
int number;
public int Number
{
get{return number;}
set{number=value;}
}
}
class Test
{
public static void Main()
{
MyClass MyObject = new MyClass();
Console.WriteLine(MyObject.Number); //取值操作对应get
MyObject.Number = 20; // 赋值操作对应set
Console.WriteLine(MyObject.Number);
}
}
例子2:
class MyClass
{
int number;
public int Number
{
set{number=value;}
}
}
class MyClassDerived : MyClass
{
new public int Number
{
get{return number;}
}
}
class Test
{
public static void Main()
{
MyClassDerived MyObject = new MyClassDerived();
((MyClass)MyObject).Number = 10;
}
}