类的字段和属性

类的字段和属性
 一般把类或结构中定义的变量和常量叫字段。属性不是字段,本质上是定义修改字段的方法,由于属性和字段的紧密关系,把它们放到一起叙述。
静态字段、实例字段、常量和只读字段
 用修饰符static声明的字段为静态字段。不管包含该静态字段的类生成多少个对象或根本无对象,该字段都只有一个实例,静态字段不能被撤销。必须采用如下方法引用静态字段:类名.静态字段名。如果类中定义的字段不使用修饰符static,该字段为实例字段,每创建该类的一个对象,在对象内创建一个该字段实例,创建它的对象被撤销,该字段对象也被撤销,实例字段采用如下方法引用:实例名.实例字段名。用const修饰符声明的字段为常量,常量只能在声明中初始化,以后不能再修改。用readonly修饰符声明的字段为只读字段,只读字段是特殊的实例字段,它只能在字段声明中或构造函数中重新赋值,在其它任何地方都不能改变只读字段的值。例子:
public class Test
{ public const int intMax=int.MaxValue;//常量,必须赋初值
 public int x=0;//实例字段
 public readonly int y=0;//只读字段
 public static int cnt=0;//静态字段
 public Test(int x1,int y1)//构造函数
 { //intMax=0;//错误,不能修改常量
  x=x1;//在构造函数允许修改实例字段
  y=y1;//在构造函数允许修改只读字段
  cnt++;//每创建一个对象都调用构造函数,用此语句可以记录对象的个数
 }
 public void Modify(int x1,int y1)
 { //intMax=0;//错误,不能修改常量
  x=x1;
  cnt=y1;
  //y=10;//不允许修改只读字段
 }
}
class Class1
{ static void Main(string[] args)
 { Test T1=new Test(100,200);
  T1.x=40;//引用实例字段采用方法:实例名.实例字段名
   Test.cnt=0;//引用静态字段采用方法:类名.静态字段名
  int z=T1.y;//引用只读字段
   z=Test.intMax;//引用常量
 }
}
属性
 C#语言支持组件编程,组件也是类,组件用属性、方法、事件描述。属性不是字段,但必然和类中的某个或某些字段相联系,属性定义了得到和修改相联系的字段的方法。C#中的属性更充分地体现了对象的封装性:不直接操作类的数据内容,而是通过访问器进行访问,借助于get和set方法对属性的值进行读写。访问属性值的语法形式和访问一个变量基本一样,使访问属性就象访问变量一样方便,符合习惯。
 在类的基本概念一节中,定义一个描述个人情况的类Person,其中字段name和age是私有字段,记录姓名和年龄,外部通过公有方法SetName和SetAge修改这两个私有字段。现在用属性来描述姓名和年龄。例子如下:
using System;
public class Person
{ private string P_name="张三"; //P_name是私有字段
 private int P_age=12; //P_age是私有字段
 public void Display() //类的方法声明,显示姓名和年龄
 { Console.WriteLine("姓名:{0},年龄:{1}",P_name,P_age);
 }
 public string Name //定义属性Name
 { get
  { return  P_name;}
  set
  { P_name=value;}
 }
 public int Age //定义属性Age
 { get
  { return  P_age;}
  set
  { P_age=value;}
 }
}
public class Test
{ public static void Main()
 { Person OnePerson= new Person();
  OnePerson.Name="田七";//value="田七",通过set方法修改变量P_Name
  string s=OnePerson.Name;//通过get方法得到变量P_Name值
  OnePerson.Age=20;//通过定义属性,既保证了姓名和年龄按指定方法修改
  int x=OnePerson.Age;//语法形式和修改、得到一个变量基本一致,符合习惯
 OnePerson.Display();
 }
}
 在属性的访问声明中,只有set访问器表明属性的值只能进行设置而不能读出,只有get访问器表明属性的值是只读的不能改写,同时具有set访问器和get访问器表明属性的值的读写都是允许的。
虽然属性和字段的使用方法类似,但由于属性本质上是方法,因此不能把属性当做变量,一些使用变量的地方并不能使用属性,例如不能把属性作为函数的引用型参数或输出参数。
 
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值