首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 銳利體驗 (六) (5):抽象方法、外部方法與方法重載本質

     編輯:關於C語言

抽象方法

抽象方法邏輯上類似虛擬方法,但無法像虛擬方法被呼叫,僅為介面宣告而非實現。無方法主體 {...},不允許實作。不可為 static。含抽象方法的類別必為抽象類別,必加 abstract 修飾詞。但抽象類別不一定含抽象方法。繼承含抽象方法抽象類別的子類別必須覆寫並實現(直接用 override),或組合 abstract override 使其繼續抽象,或不提供任何覆寫實現(後兩者行為相同)。

範例:抽象方法繼承鏈

abstract class Parent { public abstract void F(); public abstract void G(); }
abstract class Child : Parent { public abstract override void F(); }
abstract class Grandson : Child 
{ 
    public override void F() { Console.WriteLine("Grandson.F"); }
    public override void G() { Console.WriteLine("Grandson.G"); }
}

抽象方法可抽象化繼承而來的虛擬方法

class Parent { public virtual void Method() { Console.WriteLine("Parent.Method"); } }
abstract class Child : Parent { public abstract override void Method(); }
abstract class Grandson : Child { public override void Method() { Console.WriteLine("Grandson.Method"); } }

外部方法

C# 引入 extern 修飾詞表示外部方法(C# 以外語言實現,如 Win32 API)。外部方法不可為抽象方法。

範例:呼叫 Win32 API MessageBoxA

using System;
using System.Runtime.InteropServices;
class MyClass
{
    [DllImport("user32.dll")]
    static extern int MessageBoxA(int hWnd, string msg, string caption, int type);
    public static void Main()
    {
        MessageBoxA(0, "Hello, World!", "This is called from a C# app!", 0);
    }
}

編譯執行後將顯示 Win32 訊息盒。

歸根結底,掌握執行時繫結與編譯時繫結基本機理,便能看透 overload、virtual、override、sealed、abstract 等形態,善用方法這把利器!

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved