最近学习C#时,对于属性与方法之间有些模棱两可,所以这次总结关于这方面的内容,以便于与我有同方面不清楚的人提供帮助,也是便于以后查看!!
属性
在面向对象的编码中,属性一般表示对象的”’静态特征”’
属性一般采用Pascal命名法,数据类型和字段对应一致(首字母大写)
属性是访问一个私有字段的入口
一般字段设置为private 属性为public
属性的特效
- 使用属性能避免非法数据 在get set中可以添加数据逻辑
- 属性是保证数据有效性的最后一个“”屏障“”,属性比字段更具有数据安全性
public int age;
public int Age{
get{return age}
if(age<18)//屏障的运用
age=18;
else
age=value;
}
可以设置只读属性
- 有时候为了数据安全性,设置只读,而不能赋值
将set方法去掉
属性可以单独存在
1,有时候属性并不返回一个私有字段的值,而是调用一些方法
private Date Time birthday;
public Date Time Birthday{
get{return birthday;}
}
//无私有字段
public int Age{//只读 无返回值
get {return Date time.Now.Year-birthday.Year;}
}
}
自动属性
- 属性值对应私有字段时,可以调用
private Date Time birthday;
public Date Time Birthday{
get{return birthday;}
set{birthday=value;}
}
//可以等于为
public Date Time Birthday{
get;
set;
}
- 用字段编译器自动生成
- 只适合标准属性
- 属性内部不能有业务逻辑
- 不能修改只读只写
- 不能直接操作私有字段
字段
- 字段一般由类的内部使用,交换数据,使用private
- 可以给字段赋值,取值
- 当字段需要对外界提供数据的时候,将字段封装成属性,最好不改变为共有字段
方法
实例方法
编写方法考虑因素
- 根据项目了解要完成的具体要求
- 确定方法的课访问性,默认private
- 调用方法产生的结果是什么
- 方法名字,一般容易明白什么意思,采用动名词
- 调用方法需要什么条件(什么参数)
- 一般方法参数不能超过4个
- 参数过多会导致:编写,调用,扩张困难,可以调用实体类
- 只能显示对象名.方法
- 一个雷中可以没有任何实体类
方法定义规范
- 访问修饰符 返回类型 方法名称(需要达到的条件,参数){方法具体完成的功能}
public string GetBook/*方法名*/(string barCode,string bookName)/*参数,条件*/{
return string.Format("图书条码:{0},图书名称:{1}",barCode,bookName);//返回数值
}
静态方法
- static 修饰
- 直接通过类.方法调用,不像构造方法需要new一个对象才能进行调用
- 静态方法在程序开始就存在直到程序结束,所以少用静态方法,不受GC管理
构造方法
- 构造方法只能通过new来调用
- 在没有构造方法时,系统会强制加入一个构造方法
- 构造方法没有返回值,且必须与类名一致,与实例方法不同
Class Book{
Book bookCode=new Book; /*new Book为一个特殊方法*/
}
###对象初始化强制性###
- 完成对对象的初始化(带有参数)
- 传递参数
多个构造方法的调用问题
- 使用:this.参数名方式
- 避免代码重复
//public BookName{get;set;}自动属性这里省略
public Book(int bookCode,string bookName){
this.BarCode=barCode;
this.BookName=bookName;
}
public Book(int bookCode,string bookName,string Auther)
:this(barCode,bookName)//调用上部分的两个参数
{
this.Auther=Auther;
}
对象初始化器
- 简化属性的初始化,属性之间用逗号分隔
- 对于顺序没有要求
- 可以随意初始几个值
- 用到属性初始化时,且不需要构造方法时可以使用对象初始化
- 只能完成属性初始化
- 无需提前定义,构造方法必须在类里面先定义参数完成
Book booK=new Book()/*无参数*/{
BarCode=1001,
BookName="C#的属性,方法的类型"
};