yzx99

导航

 

类成员的访问类型(又称访问修饰符)
应该有四种,但我能理解的先只有两种:public与private。
private定义的成员在外部无法访问到,如果外部强行访问,编译器告错,示例代码如
下:

 1using System;
 2
 3class m
 4{
 5 static void Main()
 6 {
 7  point p=new point();
 8  Console.WriteLine("x=" + p.x.ToString());
 9 }

10}

11
12class point
13{
14 private double x=10;
15}

16

编译时出错提示如下:
p.cs(8,30): error CS0122: “point.x”不可访问,因为它受保护级别限制
p.cs(14,17): (与前一个错误相关的符号位置)
如果第14行改为public就不会出错了。

默认是什么?
当我把14行的private去掉,只写double x=10;,编译结果与private一样,由此可以
感觉出默认情况下是private的。

在VB6的控件编程中,我也是把控件的属性存在私有变量中,而用Let(或Set)与Get这两个特殊子程序来与外界沟通。如果把它移到C#中,Let与Get变为set与get。代码则写成如下:

//前面相同,省略
class point
{
 
double m_x=10;
 
public double x
 
{
  
get return m_x; }
  
set { m_x = value; }
 }

}

这样就没问题了,其中我自己设定私有变量全部用m_为开头。VB中Let是有带参数的,C#中却把参数都省了,将要设的值就是value,任何类型都用value来代替,统一,我喜欢。但与VB的代码对比一下,却发现VB的Let有时还可以多带一个索引,C#中索引如何表达?

另外,我还在IDE环境中试一了下,如果类型为枚举值,在set中使用value能不能智能
感知出其取值的可能性。结果是可以的,IDE中value的类型与x的类型保持一致。

//前面相同,省略
class point
{
 
enum POS_X
 
{
  P_LOW 
= 10,
  P_MID 
= 20,
  P_HIG 
= 30
 }
;

 POS_X m_x
=10;
 
public POS_X x
 
{
  
get return m_x; }
  
set { m_x = value + POS_X.P_LOW; }
 }

}

当你输入到“set { m_x = value +”时,IDE自动弹出POS_X及相应内容。

posted on 2008-05-25 00:18  yzx99  阅读(1144)  评论(3编辑  收藏  举报