類的面向對象特性

類的封裝

namespace ConsoleApp1
{
    class MyClass
    {
        private int x = 0;
        private int y = 0;
        public int X
        {
            get
            {
                return x;
            }
            set
            {
                x = value;
            }
        }
        public int Y
        {
            get
            {
                return y;
            }
            set
            {
                y = value;
            }
        }
        public int Add()
        {
            return X + Y;
        }
    }
    class Program
    {
        static void Main()
        {
            MyClass myclass = new MyClass();
            myclass.X = 3;
            myclass.Y = 5;
            Console.WriteLine(myclass.Add());
        }
    }
}

類的繼承

在c#中一次只允許繼承一個類,不能同時繼承多個類
利用類的繼承機制,用戶可以通過增加、修改或替換類中的方法對這個類進行擴充
使用:來標識兩個類的繼承關係,子類不能訪問基類的私有成員,可訪問公共成員
只有子類才能訪問protected成員,基類和外部代碼都不能訪問

namespace ConsoleApp1
{
    class MyClass1
    {
        private int x = 0;
        private int y = 0;
        public int X
        {
            get
            {
                return x;
            }
            set
            {
                x = value;
            }
        }
        public int Y
        {
            get
            {
                return y;
            }
            set
            {
                y = value;
            }
        }
        public int Add1()
        {
            return X + Y;
        }
    }
    class MyClass2 : MyClass1
    {
        private int z = 0;
        public int Z
        {
            get
            {
                return z;
            }
            set
            {
                z = value;
            }
        }
        public int Add2()
        {
            return X + Y + Z;
        }
    }
    class Program
    {
        static void Main()
        {
            MyClass1 myclass1 = new MyClass1();
            MyClass2 myclass2 = new MyClass2();
            myclass1.X = 3;
            myclass1.Y = 5;
            myclass2.X = 3;
            myclass2.Y = 5;
            myclass2.Z = 7;
            Console.WriteLine(myclass1.Add1());
            Console.WriteLine(myclass2.Add1());
            Console.WriteLine(myclass2.Add2());
        }
    }
}

8
8
15

重構
子類與父類的成員方法返回值、方法名稱、參數類型及個數完全相同,唯一不同的是方法實現內容

類的多態

多態使子類的實例可以直接賦予基類的變量(這裏不需要進行強制類型轉換),然後直接就可以通過這個變量調用子類的方法
利用多態可以使程序具有良好的擴展性,並可以對所有類對象進行通用的處理。

namespace ConsoleApp1
{
    class Program
    {
        private Program[] qtest = new Program[6];
        private int nextIndex = 0;
        public void draw(Program q)
        {
            if (nextIndex < qtest.Length)
            {
                qtest[nextIndex] = q;
                Console.WriteLine(nextIndex);
                nextIndex++;
            }
        }
        static void Main()
        {
            Program q = new Program();
            q.draw(new Square());
            q.draw(new Parallelogramgle());
        }
    }
    class Square : Program
    {
        public Square()
        {
            Console.WriteLine("正方形");
        }
    }
    class Parallelogramgle : Program
    {
        public Parallelogramgle()
        {
            Console.WriteLine("平行四邊形");
        }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章