C#修飾符stattic、virtual、abstract、override、sealed、extern

  1. static
    用於所有成員(函數,類、方法、屬性)成員不作用於類的具體實例。因此不需要實例化。
創建的一個Test1類裏面包含static靜態的屬性和方法
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace WindowsFormsApplication3
{
   public class Test1
    {
       public static string a = "123";
       string _b = "";
       public string b
       {
           get { return _b; }
           set { value = _b; }
       }

       public static void TestFunction()
       {

       }
    }
}

FORM窗口中調用該函數
Test1.a = "qwe";
Test1.TestFunction();
注意:這是不需要實例化的。
  1. virtual
    用於函數成員,成員可以由派生類重寫。用該修飾符修飾的函數可以作爲正常的函數使用,也可以在派生類中用override進行重寫。
  2. abstract
    對於該修飾符,在我的另一篇微博中作出了詳細的講解。
    4.sealed
    用於類、方法和屬性。對於類不能進行繼承只能實例化。對於屬性和方法,不是類的每個成員方法都可以作爲密封方法,要作爲密封方法必須對基類的虛方法進行重寫,提供具體的實現方法。
using System ;

class A
{
   public virtual void F( )
   { 
        Console.WriteLine("A.F") ; 
   }

   public virtual void G( )
   {     
       Console.WriteLine("A.G") ; 
   }
}

 class B: A
 {
     sealed override public void F( )
     { 
          Console.WriteLine("B.F") ; 
       }

     override public void G( )
     {
           Console.WriteLine("B.G") ; }
     }

 class C: B
 {
    override public void G( )
    { 
        Console.WriteLine("C.G") ; 
     }
}

5.extern
extern 修飾符用於聲明在外部實現的方法。 extern 修飾符的常見用法是在使用 Interop 服務調入非託管代碼時與 DllImport 特性一起使用。 在這種情況下,還必須將方法聲明爲 static,如下面的示例所示:
[DllImport(“avifil32.dll”)]
private static extern void AVIFileInit();
將 abstract 和 extern 修飾符一起使用來修改同一成員是錯誤的做法。 使用 extern 修飾符意味着方法是在 C# 代碼的外部實現的,而使用 abstract 修飾符意味着類中未提供方法實現。

示例 1. 在此示例中,程序接收來自用戶的字符串並將該字符串顯示在消息框中。 程序使用從 User32.dll 庫導入的 MessageBox 方法。
 //using System.Runtime.InteropServices;
    class ExternTest
    {
        [DllImport("User32.dll", CharSet=CharSet.Unicode)] 
        public static extern int MessageBox(IntPtr h, string m, string c, int type);

        static int Main()
        {
            string myString;
            Console.Write("Enter your message: ");
            myString = Console.ReadLine();
            return MessageBox((IntPtr)0, myString, "My Message Box", 0);
        }

    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章