CSharp学习笔记之十 类的修饰符

前面对C#中的类有了一定的解释,但是关于类的很多的东西前面并没有介绍的很清楚,其实C#并不是像我们想象的那样简单,我们要想将C#学的更深一步还是需要多花点时间来进行学习的。努力才会又收获的么。好的来下面来介绍一下C#中的类的修饰符:

其实大家应该都知道,类有好多种,什么抽象类了,什么虚类了等等。如何判定呢,首先是来说说抽象类吧。什么是抽象类呢,为什么要有抽象类呢。大家都知道,C#是一中面向对象的语言,面向对象语言就要有多态继承等特性。

先说一下抽象类的定义吧:不能初始化的类被叫做抽象类,它们只提供部分实现,但是另一个类可以继承它并且能创建它们的实例。通常用abstract来进行修饰。

"一个包含一个或多个纯虚函数的类叫抽象类,抽象类不能被实例化,进一步一个抽象类只能通过接口和作为其它类的基类使用."
抽象类能够被用于类,方法,属性,索引器和事件,使用abstract 在一个类声明中表示该类倾向要作为其它类的基类成员被标示成abstract,或被包含进一个抽象类,必须被其派生类实现。

下面给出一个抽象类的定义:

    abstract class abstractBaseClass
    {
        abstract public void showInfo();
    }

    class myClass : abstractBaseClass
    {
        public override void showInfo()
        {
            Console.WriteLine("hello world!");
        }
    }


这就显示一个类的继承,并实现类中的虚方法,当然,抽象类中的方法和属性不一定都是抽象的,也可以不是抽象的, 下面再给大家写一个具有非抽象方法的抽象类:

    abstract class abstractBaseClass
    {
        public void showInfo()
        {
            Console.WriteLine("hello world!");
        }
    }

    class myClass : abstractBaseClass
    {

    }

虽然在C#中是可以带有抽象方法和非抽象方法,但是在继承的时候是必须要将抽象方法给完全的实现的,否则会给你报错的。具体的实例如下

    abstract class abstractBaseClass
    {
        public void showInfo()
        {
            Console.WriteLine("hello world!");
        }

        abstract public void abFunction();
    }

    class myClass : abstractBaseClass
    {
        override public void abFunction()
        {
            Console.WriteLine("this is a abstract function!");
        }
    }

在C#中的对于抽象类中的抽象方法进行实现的情况是要用override来进行修饰的,否则仍然会进行的一个报错的。

抽象方法有以下特征:

1.一个抽象方法可以看作是一个虚函数。

2.抽象方法的声明只能在抽象类中。

3.因为抽象方法声明只提供一个无实现的方式,没有方法体

4.方法体的实现被覆写方法提供,覆写方法是一个非抽象类的成员。

5.抽象属性的行为和抽象方法相像,除了不同的声明形式。

6.在一个静态属性中使用abstract 是一个错误。

7.一个抽象属性能够通过派生类使用 override 实现

 

抽象类具有以下特征:

1.抽象类不能被实例化。

2.抽象类可以包含抽象方法和访问器

3.不能把抽象类用密封(sealed)来修饰,那就意味着类不能被继承,这违反抽象类被继承的原则。

4.一个派生于一个抽象类的非抽象类必须包括所有的继承来的抽象方法和访问器的实现

5.在方法和属性中使用abstract 关键字意味着包含它们的实现。

 

讲完了抽象类了,我们在来讲一下关于虚类,其实对于C++来说,大家都知道,有一个叫做什么虚类虚方法的直说,对于C#也就C++的++版本,也是存在这样的一个叫做虚方法的东西。其标注的关键字就是virtual,对于这个关键字我想大家都不会陌生吧。virtual 关键字用于修饰方法、属性、索引器或事件声明,并使它们可以在派生类中被重写。例如,此方法可被任何继承它的类重写。这个时候有人会问了:vitual和abstract有什么区别呢,其实说句实话,这两个东西是两个完全不同的东西。因为abstract这个关键字声明的方法,是不能够在声明的时候进行实现的,但是vitual生命的方法是必须要在声明的时候继进行实现的。这么说是不是不是很清楚,给个例子就行了:

    abstract class abstractBaseClass
    {
        public void showInfo()
        {
            Console.WriteLine("hello world!");
        }

        virtual public void doSomethin() { Console.WriteLine("hello world"); }
        abstract public void abFunction();
    }

    class myClass : abstractBaseClass
    {
        public override void abFunction()
        {
            Console.WriteLine("abstract funtion");
        }
    }


这么看不知道大家看到了什么。在抽象类中定义的一个方法虚方法,但是必须要对这个虚方法进行写一个实现的,但是在抽象类中定义的抽象方法,并不需要对其进行写实现的。其具体的实现可以在派生类中继进行书写的。这么说不知道大家是否觉得可以理解。

下面再看另外的一个关键字就是new,其实对于用new来写的方法,new顾名思义就是,一个新的,通过new写的一个方法可以覆盖其父类中的虚方法,和其他的方法,因为,new么,就是一个新的方法。

    abstract class abstractBaseClass
    {
        public void showInfo()
        {
            Console.WriteLine("hello world!");
        }

        virtual public void doSomethin() { Console.WriteLine("hello world"); }
        abstract public void abFunction();
    }

    class myClass : abstractBaseClass
    {
        public override void abFunction()
        {
            Console.WriteLine("abstract funtion");
        }

        new public void doSomethin()
        {
            Console.WriteLine("show the new functong!");
        }
    }


以上的这些,仅仅属于个人的一些学习体会,并不一定是完全的正确的!

 

 


 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值