一周学会C#(属性三)

王朝c#·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

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

Ø 属性不能使用参数

Ø 属性不能使用[ ] 参数

Ø 属性不能使用括号

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航