1. 程式人生 > >C#中隱藏(new)和方法過載(overide)的區別

C#中隱藏(new)和方法過載(overide)的區別

  重寫和隱藏的定義: 重寫:基類方法宣告為virtual(虛方法),派生類中使用override申明此方法的重寫. 隱藏:基類方法不做申明(預設為非虛方法),在派生類中使用new宣告此方法的隱藏。 這樣看起來似乎不是很清晰明瞭,換成我自己的理解就是: 比如父類A,有個方法標記為virtual,a(){}   
子類B繼承A,也宣告一個方法a(){}   
如果B裡面的a()使用override,那麼訪問A的方法時實際上呼叫了B裡面宣告的方法,相當於A的方法被覆蓋了,new就不是,訪問A的a還是A裡面定義的方法,訪問B就是B裡面定義的方法. 說白了:new是覆蓋,override是過載,“覆蓋”並不意味著“刪除”,但“過載”意味著“刪除”,這就是“覆蓋”和“過載”的區別   隱藏(new)示例: using    System;  
   class    A  
   {  
         public    void    F()    
         {  
               Console.WriteLine("A.F");    
         }  
   }  
   class    B:    A  
   {  
         new    public    void    F()    
         {    
               Console.WriteLine("B.F");    
         }  
   }  
   class    Test  
   {  
         static void Main(string[] args)
         {  
               B    b    =    new    B();  
               b.F();  
               A    a    =    b;    
               a.F();  
         }  
   }  
   輸出為  
   B.F  
   A.F   重寫virtual(虛方法)示例  
   using    System;  
   class    A  
   {  
         public    virtual    void    F()    
         {  
               Console.WriteLine("A.F");    
         }  
   }  
   class    B:    A  
   {  
         public    override    void    F()    
         {    
               Console.WriteLine("B.F");    
         }  
   }  
   class    Test  
   {  
         static    void    Main()    
         {  
               B    b    =    new    B();  
               b.F();  
               A    a    =    b;    
               a.F();  
         }  
   }  
   輸出為  
   B.F  
   B.F

相關推薦

C#隱藏(new)方法過載(overide)的區別

  重寫和隱藏的定義: 重寫:基類方法宣告為virtual(虛方法),派生類中使用override申明此方法的重寫. 隱藏:基類方法不做申明(預設為非虛方法),在派生類中使用new宣告此方法的隱藏。

C#物件的三個特點:封裝,繼承,多型, 以及c#隱藏(new)方法重寫(override)過載(overload)的區別

封裝 1)封裝原則:將不需要對外提供的內容都隱藏起來,把屬性都隱藏,提供公共方法對其訪問,通常有兩種訪問方式:set 設定,get 獲取。 2)封裝結果:存在但是不可見。 3) 訪問修飾符 宣告的可訪問性                                

C#newoverride(轉)

方法 too 找到 ring 父類 類繼承 衍生 virtual func  在衍生類中的方法上使用new和override關鍵字有何意義,可以通過一系列問題來找到答案。先看一段代碼: 1 class Program 2 { 3 s

c++newdelete

程序設計 wan https 解決 運算符 AI 指向 log cnblogs 對於計算機程序設計而言,變量和對象在內存中的分配都是編譯器在編譯程序時安排好的,這帶來了極大的不便,如數組必須大開小用,指針必須指向一個已經存在的變量或對象。對於不能確定需要占用多少內存的情況,

C++預設引數函式過載

預設引數概念:        預設引數是宣告或定義函式時為函式的引數指定一個預設值,在呼叫該函式時,如果沒有指定實參則採用該預設值,否則使用指定的實參。 舉例說明: #include<malloc

淺談c++結構體共用體的區別

ont 基本類型 erl list 變量名 ext 使用結構體 oot 數據格式 在c++中,結構體(struct)和共用體(union)是兩種很相似的復合數據類型,都可以用來存儲多種數據類型,但是兩者還有很大的區別。 結構體(struct) 結構是用戶自定

方法重寫方法過載區別?

**方法過載:overload一個類中你有了一個方法A,在這個類中你又寫了一個方法B,方法A和方法B的方法名一樣,但引數不同,返回值型別不同,與返回值無關,此時方法B過載了方法A;引數不同體現在:(1): 引數型別不同;(2): 引數個數不同;(3): 引數順序不同;例如:public class TestC

JAVA:方法重寫方法過載區別

                                          &

c++*p=ap=&a的區別

#include <iostream> using namespace std; int main() {     int a = 10;     int *PA = new int;     *PA = a;     cout << "*PA i

java方法重寫方法過載區別

方法重寫(override):     子類繼承父類,子類中方法繼承父類的方法。當子類中方法重寫,會覆蓋父類的方法。     eg:       class Father{   &

java-方法重寫方法過載區別

1、方法過載:  -  可以改變返回值型別,只看引數列表。  -  本類中出現的方法名一樣,引數列表不同的方法,與返回值型別無關。   2、方法重寫:  -  子類中出現了和父類中方法宣告一模一樣的方法。與返回值型別有關,返回值是一致的,或者是子父類的。 &

JavaScript物件的函式方法有什麼區別(非常重要!!!)

在JavaScript中,物件是由建構函式生成的,且函式本身有屬性和方法,所以為了區分函式的方法和物件的方法,才有了函式和方法兩個概念,在其他很多語言中,函式就等於方法,而JavaScript完全不一樣! 例子: function Person() { } var arry=

C++ return this return *this 的區別

我們都知道c++   this指標的概念(可參考),this指標說白了就是存放當前物件的地址;那麼 我們可以理解為  *this為去改指標的內容即是當前的物件,所以return *this 返回的應該是當前的物件本身或者說是該物件的克隆 ;而this既然為指標,改指標指向的是

談一談C#File類FileInfo類的區別

File類是一個靜態類,優點:呼叫簡單;缺點:始終消耗CPU資源。FileInfo類是一個例項類,優點:呼叫完就釋放CPU資源;缺點:操作複雜這裡用一個讀取一篇文章幷包含空格,處理空格後,再寫回去的操作來演示兩者是如何對檔案進行操作的。File類: //

C常量字串字元陣列的區別

1、 常量字串 在程式碼裡直接出現的”abcdef”這種字串,在程式執行的時候,系統會將它們放在常量區,所謂常量區就是一直存在的,只讀的,不可更改的資料區域,並且一個字串只會有一份。假設你在程式裡有兩行程式碼 char* p1 = “agcd”; char* p2 = “a

C++常量指標指標常量的區別

一、常量指標 常量指標本質是指標,常量修飾它,表示這個指標是一個指向常量的指標(變數),也就是指向一個無法修改的量。 C++中常量指標定義為:const int* a,當然int const * a也可以,不過習慣用第一種了。 使用常量指標時要注意,指標指向的物件不能通

C++值傳遞引用傳遞的區別

    最近補資料結構和演算法時,捎帶著學了些C++,剛好看到一篇關於值傳遞和引用傳遞的文章,收穫頗豐,這裡分享一下學習心得,當然,C#中也差不多。     C++中引數的傳遞方式: 1.值傳遞     呼叫時,將實參的值傳遞對應的形參,即為值傳遞。由於形參有自己獨立的儲存

c++,運算子函式有什麼區別

首先看下運算子的定義: 函式型別 operator 運算子(形參表)  {    函式體; {  譬如++運算子的過載為: class lei{ friend lei operator++(const lei& ); } 呼叫的時候

C++返回引用返回值的區別

nbsp 反匯編 一個 的區別 tle cout span 編譯 匯編語言 轉自https://www.cnblogs.com/JMLiu/p/7928425.html 一、主要討論下面兩個函數的區別: int& at() { return

C# 類隱藏基類方法Partial

C# 類中隱藏基類方法和Partial 時間 2014-11-14 11:50:03   薑糖水 原文   http://www.cnphp6.com/archives/60699