面向对象概念
①特征即属性,行为即方法
②对象:看得见,摸得着,具体的,特指的
③类:类是模子,确定对象将会拥有的特征(属性)和行为(方法),是对象的类型。
类不占内存,对象才占内存
类的定义
[访问修饰符] class 类名
{
成员
...
}
类的实例化
语法: 类 实例名 = new 类();
类的成员访问: 实例名 属性 实例名.方法名();
DotNet中类(class)与结构(struct)的异同
Class可以被实例化,属于引用类型,是分配在内存的堆上的。类是引用传递的。
Struct属于值类型,是分配在内存的栈上的。结构体是复制传递的。Int32,Boolean等都是结构体
C#中比较4种修饰符的访问权限
private:私有成员,在类的内部才可以访问
protected:保护成员,该类内部和继承类中可以访问
public:公共成员,完全公开,没有访问限制
internal:当前程序集内可以访问
属性
属性是为了保护与之相对应的字段的,保证对字段的读取和赋值符合要求。属性可分为读写,只读,只写。允许外部访问的变量一定要声明为属性
比较字段和属性
构造函数
语法:public 类名(参数可以有可以无)
{}
构造函数可以重载
相关练习1
写一个Ticket类,有一个距离属性(本属性只读,在构造方法中赋值),不能为负数,有一个价格属性,价格属性只读,并且根据distance计算价格Price(1元/公里):
0-100公里 票价不打折
101-200公里 总额打9.5折
201-300公里 总额打9折
300公里以上 总额打8折
用一个方法,可以显示这张票的信息
Ticket.cs中代码
namespace 类的练习 { public class Ticket { public Ticket(int distance) { if (distance<0) { distance = 0; } this._distance = distance; } int _distance; public int Distance { get { return _distance; } } double _price; public double Price { get { if (_distance <= 100) { return _distance * 1.0; } else if (_distance <= 200) { return _distance * 0.95; } else if (_distance <= 300) { return _distance * 0.9; } else { return _distance * 0.8; } } } public void Show() { Console.WriteLine("{0}公里的价格为{1}",this.Distance,this.Price); } } }
Program.cs中的代码
static void Main(string[] args) { Ticket t = new Ticket(90); t.Show(); Console.ReadKey(); }