c#学习笔记——抽象类、抽象方法、抽象属性

来源:互联网 发布:淘宝手机端怎么加热点 编辑:程序博客网 时间:2024/05/16 07:10

转自:http://blog.sina.com.cn/s/blog_673ccb5b0100i953.html




抽象类与抽象方法:

    先说些概念的东西:

    在一个类前面加上“abstract”关键字,此类就成为了抽象类。 对应的,一个方法类前面加上“abstract”关键字,此方法就成为了抽象方法。

    abstract class Fruit    //抽象类
    {
        public abstract void GrowWhere(); //抽象方法
    }

    注意抽象方法不能有实现代码,在函数名后直接跟一个分号。

    抽象类专用于派生出子类,子类必须实现抽象类所声明的抽象方法,否则,子类仍是抽
象类。

 

好了,说一下我个人的理解吧:抽象类就是定义一个类(里面不止是有方法还有属性,属性等等讲),里面都是些想要被重写的方法(属性),然后方便子类重写,抽象类的抽象方法就不能写实行代码,子类去写。也可以理解我,抽象类里的抽象方法(属性)都很抽象,每个子类的实现代码都不一样,这样就方便子类去写,也就不必虚拟和重写了。

还有就是抽象类里的所有抽象方法,子类都要用到。

 

看个列子吧:

namespace StudyTemp

{

    abstract class Firit

    {

        public void SayHello()

        {

            Console.WriteLine("大家好,我是水果!");

        }

        public abstract void GrowWhere();

    }

    class Apple Firit

    {

        public override void GrowWhere()

        {

            Console.WriteLine("南方北方都有我");

        }

    }

    class Banana Firit

    {

        public override void GrowWhere()

        {

            Console.WriteLine("南方才有我");

        }

    }

    class Program

    {

        static void Main(string[] args)

        {

            Firit f;

            new Apple();

            f.SayHello();

            f.GrowWhere();

            new Banana();

            f.SayHello();

            f.GrowWhere();

            Console.ReadKey();

        }

    }

}

 

截图:

c#学习笔记——抽象类、抽象方法、抽象属性

 

这个列子还想说一些细节方面的:

包含抽象方法的类一定是抽象类,但抽象类中的方法不一定是抽象方法。也就是当一个类里有一个方法是抽象方法,那么这个类就是抽象类,但是抽象类里可以有不抽象的方法和属性。就不如上面的SayHello方法。

在调用的时候就应该这样:抽象类 抽象类变量名 = new 继承自此抽象类的具体子类名( );

抽象属性

刚才说了,除了方法可以是抽象的之外,属性也可以是抽象的。

先给个例子吧,也是水果的:

namespace StudyTemp

{

    abstract class Firit

    {

        public abstract string Name

        {

            get;

            set;

        }

        public abstract void SayHello();

    }

    class Apple Firit

    {

        private string name;

        public override string Name

        {

            get

            {

                return name;

            }

            set

            {

                if (value != "小红")

                {

                    this.name value;

                }

                else

                {

                    Console.WriteLine("不能用这个名字!");

                    return;

                }

            }

        }

        public override void SayHello()

        {

            Console.WriteLine("我是苹果{0}",name);

        }

    }

    class Program

    {

        static void Main(string[] args)

        {

            Firit f;

            new Apple();

            f.Name "小白";

            f.SayHello();

            Firit a;

            new Apple();

            a.Name "小红";

            Console.ReadKey();

        }

    }

}

 

c#学习笔记——抽象类、抽象方法、抽象属性

看到了,我们对属性也进行了重写。

0 0