C#:抽象類和抽象函數, 密封類和密封方法


1. 抽象類和抽象函數

  • C#中使用abstract關鍵字,將類和函數聲明為抽象類或抽象函數
  • 抽象類不能實例化,抽象函數沒有執行代碼,必須在非抽象的派生類中重寫
  • 抽象函數是虛擬的,但不需要提供virtual關鍵字,否則會報錯
  • 如果類包含抽象函受,該類將也是抽象的,也必須聲明為抽象的
    abstract class MyAbstract
    {
        // 變量的定義不適用abstract關鍵字
        private int i;

        // 屬性
        public abstract int count { get; set; }

        // 方法
        public abstract string getName();
    }

2. 密封類和密封方法

  • C#中使用關鍵字sealed,將類和方法聲明為密封類或者密封方法
  • 對於密封類來說,表示不能繼承該類;對於密封方法來說,表示不能重寫該方法
  • 密封類不能作為基類被繼承,但它可以繼承別的類或借口
  • 在密封類中不能聲明受保護成員或虛成員,因為受保護成員只能從派生類進行訪問,而虛成員只能在派生類中重寫
  • 由於密封類的不可繼承性,因此密封類不能聲明為抽象的,即sealed修飾符不能與abstract修飾符同時使用
1     public sealed class myClass     //聲明密封類
2     {
3         public int = 0;
4         public void method()
5         {
6             Console.WriteLine("密封類");
7         }
8     }
  • 並不是每個方法都可以聲明為密封方法,密封方法只能用於對基類的虛方法進行實現並提供具體的實現,所以,聲明密封方法時,sealed總是和override同時使用
using System;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            MyClass2 test = new MyClass2();
            test.Method();
        }
    }

    public class MyClass1
    {
        public virtual void Method()
        {
            Console.WriteLine("基類中的虛方法");
            Console.ReadLine();
        }
    }

    public sealed class MyClass2:MyClass1
    {
        public sealed override void Method()
        {
            base.Method();
            Console.WriteLine("密封類中重寫后的方法");
        }
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM