一周学会C#(属性三)
C#才鸟(QQ:249178521)
8. 静态属性
l 静态属性是和类联系在一起的
Ø 只能通过类名使用
sealed class Error
{
...
public static TextWriter Log
{
get { return log; }
}
...
private static Stream sink
= new FileStream("error.log", FileMode.Append);
private static TextWriter log
= new StreamWriter(sink);
}
Error.Log.WriteLine("time out");
字段可以是静态的,所以属性也可以是静态的。声明静态属性的语法很简单,只要在属性名前加入static关键字。静态函数中的机制和限制同样适用于静态属性。静态属性可以同一般的属性一样声明为只读或只写。
静态属性没有隐含的this参数。例如,上面的例子中,Log这个静态属性之所以能访问log这个字段,是因为log是一个静态字段。如果log是一个实例字段,那么Log这个静态属性就不能访问它。例如:
public sealed class Error
{
public static TextWriter Log
{
get { return log; }
}
private Stream sink = ...;
private TextWriter log = ...;
}
9. 属性vs.字段
l 属性和字段的比较:
Ø 属性不能使用ref/out 型参数
Ø 属性使用前必须赋值
//属性
struct Time
{
...
public int Hour
{
set { ... }
}
private int hour;
}
Time lunch;
Method(out lunch.Hour); //错误
lunch.Hour = 12;//错误
//字段
struct Time
{
...
public int Hour;
...
}
Time lunch;
Method(out lunch.Hour); //正确
lunch.Hour = 12;
属性使用前必须赋值,例如:
Time lunch;
lunch.Hour = 12;//错误,lunch没有初始化
10. 属性vs.函数
l 相似点
Ø 都包含执行代码
Ø 都可以有访问修饰符
Ø 都可以有virtual, abstract, override 修饰符
Ø 都可以用在接口中
l 不同点
Ø 属性只能拥有get/set 语句
Ø 属性不可以是void 型
Ø 属性不能使用参数
Ø 属性不能使用[ ] 参数
Ø 属性不能使用括号