LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

C#繼承

admin
2017年2月7日 18:52 本文熱度 6168

一、繼承的類型
1.1 實現繼承和接口繼承
C#中既有實現繼承,也有接口繼承。它們沒有強弱之分,因為兩種繼承都完全內置于語言,因此很容易為不同的情形選擇最好的體系結構。
實現繼承:表示一個類型派生于一個基類型,擁有該類型的所有成員字段和函數。
接口繼承:表示一個類型只繼承了函數的簽名,沒有繼承任何實現。在需要指定該類型具有某些可用的特征時,最好使用這種類型的繼承。接口繼承常常被看做提供了一種契約:通過類型派生于接口,從而保證為客戶提供某個功能。
1.2 多重繼承
 C#不支持多重實現繼承,但允許類型派生于多個接口。所以C#類可以派生于另一個類和任意多個接口。
1.3 結構和類
前面說過了結構是值類型,不支持繼承,但是每個結構都自動派生于System.ValueType。實際上,不能建立結構的類型層次,但結構可以實現接口。
二、實現的繼承
類派生于另一個類,語法如下:

class MyDerivedClass:MyBaseClass
{
 
//function and data members here

}
C#不支持私有繼承,所以基類名上沒有public或private限定符。
類派生于接口,則用都好分隔。
2.1 虛方法
在C#中可以把在方法或者屬性的前面加上virtual,聲明基類的方法為虛方法或者虛屬性,虛方法和虛屬性的規則相同。語法如下:
class MyBaseClass
{
   
public virtual string
 VirtualMethod()
   
{
     
return "this method is virtual and define in MyBaseClass"
;
   }

}
在C#中,方法在默認的情況下不是虛擬的,但(除構造函數以外)可以顯示的聲明。派生類重寫基類的虛方法時,要使用override關鍵字顯示聲明:
注意:成員字段和靜態函數不能被聲明為virtual,因為這個概念只對類中的實例函數成員有意義。
2.2 隱藏方法
如果在基類和派生類中都聲明了簽名相同的方法,而基類中的方法又沒有聲明為virtual,派生類中的方法也沒有聲明成override,則派生類方法就會隱藏基類方法。結果是調用哪個類的方法取決于引用實例的變量類型,而不是實例本身的類型。
2.3 調用函數的基本版本
C#有一種特殊的語法用于從派生類中調用方法的基本版本:base.<MethodName>()。
2.4 抽象類和抽象函數
C#中的抽象類要聲明為abstract,抽象類不能實例化,抽象函數沒有執行代碼,必須在非抽象的派生類中重寫。顯然抽象函數也是虛擬的,但不需要提供virtual關鍵字,而用abstract關鍵字。如果類包含了抽象函數,那么該類也是抽象的,類必須用abstract聲明。
absttact class Building
{
  
public abstract decimal CalculateHeatingCost();//abstract method

}
2.5 密封類和密封方法
C#允許把類和方法聲明為sealed,對于類來說,這表示不能繼承該類;對于方法來說,這表示不能重寫該方法。
sealed class FinalClass
{
}
2.6 派生類的構造函數
在創建派生類的實例時,實際上會有多個構造函數在起作用。實例化類的構造函數本身不能初始化類,還必須調用基類中的構造函數。即派生類的實例構造是按層次結構進行的,順序是先執行基類的構造函數,再執行派生類的構造函數。
基類的構造函數總是最先調用,那么派生類的構造函數可以在執行的過程中調用基類的方法、屬性和其他成員,因為基類已經構造出來了,其他字段也初始化了。
//在結構層次中添加無參數的構造函數
public abstract class GenericCustomer
{
  
private string
 name;
  
public GenericCustomer():base
()
  
{
    name 
= "myName"
;
  }

}


//在結構層次中添加帶參數的構造函數
public class Nevermore60Customer:GenericCustomer
{
  
private int
 highCost;
  
public Nevermore60Customer(string name):base
(name)
  
{
    
this.highCost = 0
;
  }

}
三、修飾符
C#中完整的修飾符列表:
修飾符應用于說明
public所有類型或成員任何代碼均可以訪問該方法
protected類型和內嵌類型的所有成員只有派生的類型能訪問該方法
internal類型和內嵌類型的所有成員只能在包含它的程序集中訪問該方法
private所有類型或成員只能在它所屬的類型中訪問該方法
protected internal類型和內嵌類型的所有成員只能在包含它的程序集中和派生類型的代碼中訪問該方法

四、接口
接口中只能包含方法、屬性、索引器和事件的聲明。接口不能實例化,不能有構造函數或字段,也不包含運算符重載。接口定義中還不允許聲明成員的修飾符,成員接口總是public的,不能聲明成virtual或者static
4.1 接口的定義和實現
//定義
namespace InterfaceTest
{
  
public interface
 IBankAccount
  
{
    
void PayIn(decimal
 amount);
    
bool Withdraw(decimal
 amount);
    
decimal
 Balance
    
{
      
get
;
    }

  }

}


//實現
namespace InterfaceTest
{
  
public class
 SaverAccount:IBankAccount
  
{
    
private decimal
 balance;
    
public void PayIn(decimal
 amount)
    
{
      balance 
+=
 amount;
    }

    
public bool Withdraw(decimal amount)
    
{
      
if(balance >=
 amount)
      
{
        balance 
-=
 amount;
        
return true
;
      }

      Console.WriteLine(
"Withdrawal attempt failed.");
      
return false
;
    }

    
public decimal Balance
    
{
      
get

      
{
        
return
 balance;
      }

    }

    
public override string ToString()
    
{
      
return String.Format("Venus Bank Saver:Balance = {0,6:C}"
,balance);
    }

  }

}

4.2 派生的接口
接口可以繼承,其方式與類的繼承相同。

該文章在 2017/2/7 18:52:32 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved

黄频国产免费高清视频,久久不卡精品中文字幕一区,激情五月天AV电影在线观看,欧美国产韩国日本一区二区
亚洲国产午夜福利 | 五月天伊人久久大香线焦 | 日本一卡久久伊人 | 亚洲国产va午夜在线电影 | 日本久久在精品线影院 | 最新国产91精品 |