一周学会C#(属性三)

一周学会 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 _ ** ** 型 ** ** **

Ø ** 属性不能使用参数 ** ** **

Ø ** 属性不能使用 ** ** [ ] ** ** 参数 ** ** **

Ø ** 属性不能使用括号 ** ** **

Published At
Categories with Web编程
Tagged with
comments powered by Disqus