C#修飾符詳解


  不定期更新,2017.8.9

一、new

  別看new這個修飾符經常用,恐怕很多人都不知道其本質。我們先來看看new修飾符的官方定義:

  new 僅允許在嵌套類聲明中使用,表明類中隱藏了由基類中繼承而來的與類中同名的成員。

  看懂了嗎?不懂沒關系,咱們接着往下看

  首先,我定義一個類:

 1 namespace 修飾符概念
 2 {
 3     class new修飾符
 4     {
 5 
 6         private string StrName;
 7 
 8         public string strName
 9         {
10             get { return StrName; }
11             set { StrName = value; }
12         }
13 
14         private int IntPassWord;
15 
16         public int intPassWord
17         {
18             get { return IntPassWord; }
19             set { IntPassWord = value; }
20         }
21 
22         //上面是倆字段和屬性,下面來構造,啊哈哈哈
23         public new修飾符( )
24         {
25             strName = "我是蜀雲泉";
26             intPassWord = 1234567;
27         }
28     }
29 }

這個類里面有兩個字段屬性,一個構造,構造在new的時候會調用默認的那一個,其中構造的作用就是在new的時候初始化類數據。

  控制台代碼及結果:

 1 namespace 修飾符概念
 2 {
 3     class Program
 4     {
 5         static void Main(string[] args)
 6         {
 7             new修飾符 vae = new new修飾符();
 8             Console.WriteLine(vae.strName);
 9             Console.WriteLine(vae.intPassWord);
10             Console.ReadLine();
11         }
12     }
13 }

  

我的new修飾符這個類寫完之后呢他是保存在硬盤中的,和內存沒有半毛錢關系(除非這個類里面含有static關鍵字)。然后在控制台里面你new了一個該類類型的對象vae出來的時候,系統就會在內存中給這個對象vae分配一個該類大小的存儲空間出來。就是這樣。

 

二、public修飾符

  來看看官方的定義

  public  表示不限制對該類的訪問

  public應該就不用講了吧,這個用的最多,只要一個成員定義成public之后呢,該類內部可以隨意的訪問他,其他類也可以隨意的訪問他,該類被繼承之后其子類也可以隨意的訪問他。通俗的說就是“我的就是大家的,隨意拿去用,別客氣”

三、protected修飾符

  來看看官方的定義

  protected  表示只能從所在類和所在類派生的子類進行訪問

  看着官方的定義就應該明白了,我還是貼上代碼吧:

  首先我新建一個類:  

 1 namespace 修飾符概念
 2 {
 3     class protected修飾符
 4     {
 5         private string StrName;
 6 
 7         protected string strName
 8         {
 9             get { return StrName; }
10             set { StrName = value; }
11         }
12 
13         protected void Start()
14         {
15             Console.WriteLine("這是被保護的一個方法");
16         }
17     }
18 }

  在控制台里面調用這個類里面的方法試試行不行:

  

namespace 修飾符概念
{
    class Program
    {
        static void Main(string[] args)
        {

             protected修飾符 vae = new protected修飾符();
             vae.
            
            Console.ReadLine();            
        }
    }
}

 

結果是無法調用的。

 

接下來看看子類能不能調用:

 1 namespace 修飾符概念
 2 {
 3     class protected類的繼承者:protected修飾符
 4     {       
 5 
 6         public void test()
 7         {
 8             Start();
 9         }
10     }
11 }

完全ok啊。

 

那么接下來我要做一個猜想了,其子類的實例化對象能不能調用這個保護的方法呢?

namespace 修飾符概念
{
    class Program
    {
        static void Main(string[] args)
        {
           
             protected類的繼承者   vae = new protected類的繼承者();
             vae.test();
          
            Console.ReadLine();            
        }
    }
}

是可以的。好了,現在能完全了解protected的官方定義了吧。

 

四、static

static在百度百科里面介紹的已經很詳細了,我再敘述一下吧。static分為靜態字段和靜態方法。存儲在全局數據區,所以不占用類的空間大小。

對於一個全局變量。全局范圍內都可以訪問到他。這是不用通過什么關系來找的,因為全局變量就擺在那里,大家都看得到,你愛訪問就訪問。

對於一個靜態的成員。它的訪問原理跟全局變量是一樣的。但是它隱身了,一般類人看不到它,但是它又設置了隱身對自己的類可見,那么那個類就可以看到它。

一個全局變量不屬於某個類,或某個函數。
一個靜態成員對象它屬於某個類,但是它只有一個,這個類可以使用它,但是它是也公有財產,不屬於某個對象。當你為一個對象分配空間時,不用再另外給它一個空間來放靜態成員對象。所以你在sizeof()時,靜態對象的大小沒有影響。

五、internal

  internal的意思就是只能在程序集中訪問。

例如下面,命名空間Test下的兩個類

namespace Test
{
    internal class a
    {
         public void b()
         {
             Console.Write("蜀雲泉真帥");
         }
    }
    public class Write
    {
        public void WriteOut()
        {
            class x = new a();    
            x.b();
        }
    }
}

現在我外部想調用這個類里面的方法:

//可以這么訪問  
Test.Write x = new Test.Write();
x.WriteOut();
//但不可以這么訪問
Test.a x = new Test.a();
x.b();

這就是internal的功能,只能在程序集中訪問。

 

 六、sealed

  sealed是禁止繼承的修飾符,例如類A定義了sealed,那么類A就不能被繼承,同樣,可以用在虛方法,虛屬性上面。總之,就是防止被繼承。 

 


免責聲明!

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



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