温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

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

发布时间:2020-06-11 18:02:57 来源:网络 阅读:608 作者: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();
        }
    }


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI