什么是c#面向对象的开发语言,C#面向对象基础——字段、属性和索引器

C#面向对象基础——字段、属性和索引器

发布时间:2020-06-11 18:02:57

来源:51CTO

阅读:516

作者:dongdong200514

关于面向对象编程,在很多语言里面都出现过,最常用的如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();

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值