关于面向对象编程,在很多语言里面都出现过,最常用的如java和c++,
创新互联专注于科尔沁企业网站建设,响应式网站建设,商城网站定制开发。科尔沁网站建设公司,为科尔沁等地区提供建站服务。全流程定制设计,专业设计,全程项目跟踪,创新互联专业和态度为您提供的服务
C#语言关于面向对象编程的规范,我觉得介于上面两者之间,我的理解是它比较偏向c++,或许是因为跟它的析构函数有关系,像java有较好的内存、垃圾回收机制,C#这方面有没有或者好不好因为我初学也不好说,只能分析和编写一些小代码作为对它的初探。
关于类的声明、析构函数、重载和实例化其实很其他语言没有什么差别,对于“字段、属性和索引器”因为明显感觉到和其他语言存在编写上的差别,所以放上来说一说。
字段是开发中常见的常量或者变量,它是类的一个构成部分,最简单的例子:
string str;
属性有如下定义:
[修饰符][类型][属性名]
{
get{ get访问器}
set{ set访问器}
}
string str; public string Str { get { return str; } set { str = value; } }
在我自己训练的程序里面,value通常都为键盘输入的值,通常我写的为:
p.Str = Console.ReadLine();
通过上面的代码就可以简单地设置属性的值。
索引器:
C#语言支持一种名为索引器的特殊“属性”,能够实现引用数组元素的方式来引用对象
声明格式如下:
[修饰符][类型]this[[参数列表]]
{get{}和set{}}
我们可以定义一个类Coll,在里面设置如下:
public const int MaxNum = 3; private string[] arr; public string this[int index] //定义索引器 { get { return arr[index]; } set { arr[index] = value; } } public Coll() { arr = new string[MaxNum]; //设置数组的长度 }
然后在另一个类中的Main方法中新建类Coll的对象col,
通过col[0]="123"这样就可以设置数组的值
关于类的面向对象特性,这里提及一下关于继承和多肽的概念,这方面的内容和C++的也较为类似:
class Fruit { string name; //定义字段 string color; public Fruit(string str)//定义构造函数为name字段赋值 { name = str; } public string Color //定义属性 { set { color = value; }//为color设置值 } public void Information() { Console.WriteLine("{0} 颜色: {1}", name, color); } } class Apple : Fruit { string name; string color; public Apple(string str): base(str) { name = str; } }
程序中的Apple类虽然没有设置属性Color和方法Information,但因为它继承自Fruit类,自然就有Fruit的属性和方法(这里的说明没有说到关于修饰符的内容)
所以新建的apple对象也可以调用:
apple.Color = "红色"; apple.Information();
类的多态:
子类的实例可以直接赋予基类的对象,并直接通过该对象调用子类的方法。
class People { public virtual void Body() { Console.WriteLine("{0}",this.Name); } } class A : People { public override void Move()//重写方法 { Console.WriteLine("{0}",this.Name); } }
最后,附上根据书上敲的完整实例,通过调试,修改其中一些代码应该也比较好理解:
class Vehicle { string name;//定义字段 public string Name//定义属性为字段赋值 { get { return name; } set { name = value; } } public virtual void Move() { Console.WriteLine("{0}都可以移动", this.Name); } } class Train : Vehicle { string name; public override void Move() { //base.Move(); Console.WriteLine("{0}在铁轨上行驶", this.Name); } } class Car : Vehicle { string name; public override void Move() { Console.WriteLine("{0}在公路上行驶", this.Name); } } class Program { static void Main1(string[] args) { Vehicle verhicle = new Vehicle(); Train train = new Train(); Car car = new Car(); verhicle.Name = "交通工具"; train.Name = "火车"; car.Name = "汽车"; verhicle.Move(); train.Move(); car.Move(); } }