類型種別 | 隱含擔當自 |
---|---|
班級 | |
佈局體 | 、 |
enum | 、 、 |
委託 | 、 、 |
繼續和「是一種」關係
的一般功能合用於任何類型。
public struct ValueStructure : ValueType // Generates CS0527.
{
}
隱含繼續
除可能透過單一繼承獲得的任何類型外,.NET 類型系統中的所有類型都隱含地繼續自 或由它衍生的類型。
測試兩個物件相等的三種方式:公用實例 Equals(Object)
方式、公用靜態 Equals(Object, Object)
方式,和公用靜態 ReferenceEquals(Object, Object)
方式。
按照預設,這些方式會測試參考相等性;也就是說,若要相等,兩個物件變數必需參考溝通的物件。
在敕令提醒字元中輸入 饬令,以設立建設新的 .NET Core 專案。 繼承是面向物件程式設計說話的功能,可讓您定義供應特定功能(數據和行為)的基類,和定義擔當或覆寫該功能的衍生類別。
本講授課程介紹 C# 中的繼承。
從號令行輸入 敕令,以載入或還原專案的相依性。
若要查看隱含繼續的意義,讓我們界說新的類別,SimpleClass
,這隻是空的種別定義:
在其他平臺上,您必須個體安裝這些元件。毛病訊息指出,固然您可以定義構造實作的介面,但不支持繼續。
public abstract class A
{
public abstract void Method1();
}
public class B : A // Generates CS0534.
{
public void Method3()
{
// Do something.
}
}
擔當僅合用於種別和介面。 由於這些規則,測驗考試像以下範例一樣編譯程式代碼會產生編譯程式毛病 CS0527:“介面清單中的類型 'ValueType' 不是介面。 其他類型種別(結構、委派和羅列)不支撐繼續。
,其會初始化 種別的靜態數據。
一般而言,繼承是用來示意基類與一或多個衍生類別之間的「是」關聯性,此中衍生種別是基類的特別版本;衍生種別是基類的類型。 例如,Publication
種別代表任何類型的刊行集,而 Book
和 Magazine
類別則代表特定類型的刊行集。
若要認識如何經管 NuGet 套件源,請參閱 。
在 Windows 上,使用此 來安裝所有需要前提。
假如您已安裝某些專案,WinGet 將會略過此步驟。 例如,下列典範會呼叫SimpleClass.ToString
方式,SimpleClass
擔當自 。由於隱含擔當,您可以從 SimpleClass
物件呼喚任何擔當的成員,就好像它現實上是在 SimpleClass
種別中定義的成員一樣。
-
- 換句話說,類型
D
可以擔當自類型C
,而類型C
繼承自類型A
,而類型A
繼續自基類類型 。 也就是說,種別只能繼續自單一類別。C# 和 .NET 僅支援 單一繼承。 因為繼承是可轉移的,因此類型
A
的成員可用於類型D
。 不外,繼續是可轉移的,可以讓您界說一組類型的繼續階層。 受保護的 方式,其設計目標是在垃圾搜集器收受接管物件記憶體之前釋放非受控資源。 繼續基類成員的類別稱為 衍生類別。
繼續 是面向物件程序設計的基本屬性之一。 擔當成員的種別稱為 基類。 它可以讓您定義可重複利用(繼承)、擴充或點竄父種別行為的子種別。
公有繼續成員可以像是在衍生類別中界說的一樣被呼叫。成員在衍生種別中可見,並且是衍生種別公用介面的一部門。 在下列範例中,種別
A
會界說名為Method1
的方式,而 種別B
擔當自 種別A
。 然後,此規範會呼喚Method1
,就像是B
上的實例方式一樣。公用
。ToString
方式會將SimpleClass
物件轉換成其字串透露表現法,會傳回完整型別名稱。 在此環境下,ToString
方法會傳回字串 「SimpleClass」。種別或結構可以實作一或多個介面。 雖然介面的實作常常被視為單一繼續或結構利用繼承的權宜之計,但它的目標是表達介面與其實作型別之間的不同關係,即「能履行」的關係,而非繼承。 介面界說了一組功能子集(例如測試相等性、比力或排序物件的能力,或支援對文化特征敏感的剖析與格式化),並將這些功能供給給實作該介面的類型。
建立目次來儲存典範榜樣。
您沒必要執行 ,因為其會由需要進行還原的所有號令隱含執行,例如
dotnet new
、dotnet build
、dotnet run
、dotnet test
、dotnet publish
和dotnet pack
。 若要停用隱含還原,請利用--no-restore
選項。固然基類的所有其他成員都是由衍生種別繼承的,但不論它們是不是可見,都取決於其存取規模。 成員的存取規模會影響其衍生類別的可見性,以下所示:
-
public class SimpleClass { }
SimpleClass
類型的成員清單。 其中一個成員是 C# 編譯程式主動為SimpleClass
類型供給的無參數(或預設)建構函式。 其餘八個是 的成員,這是 .NET 類型系統中所有種別和介面最終都邑隱含繼承的類型。SimpleClass
類別中定義任何成員,但規範的輸出指出它現實上有 9 個成員。將類型中的程式代碼複製並貼到程式碼編纂器中。
public class A { private int _value = 10; public class B : A { public int GetValue() { return _value; } } } public class C : A { // public int GetValue() // { // return _value; // } } public class AccessExample { public static void Main(string[] args) { var b = new A.B(); Console.WriteLine(b.GetValue()); } } // The example displays the following output: // 10
成員只能在衍生種別中顯示。
先決前提
- 最新
- 編纂器
安裝指示
靠山:什麼是繼續?
公用
GetHashCode
方式,該方式較量爭論出一個值,使得型其它實例可以在哈希調集中使用。 - 如果您在義務欄中收到閃灼的用戶帳戶節制 (UAC) 提示,請許可安裝繼續。
- 下載檔案,然後按兩下以執行它。
- 閱讀許可和談,輸入 y,然後在系統提示接受時拔取 [輸入]。
public class A { public void Method1() { // Method implementation. } } public class B : A { } public class Example { public static void Main() { B b = new (); b.Method1(); } }
衍生類別也能夠藉由提供替換實作,覆寫繼續的成員。 若要可以或許覆寫成員,基類中的成員必需以 樞紐詞標示。
嘗試覆寫非虛擬成員,以下列類型所示,會產生編譯程式毛病 CS0506:“<成員> 沒法覆寫繼續的成員 <成員>,因為它未標示為虛擬、抽象或覆寫。 憑據預設,基類成員不會標示為virtual
,且沒法覆寫。public GetType
方式,會傳回代表 型另外 SimpleClass
物件。
using System.Reflection;
public class SimpleClassExample
{
public static void Main()
{
Type t = typeof(SimpleClass);
BindingFlags flags = BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public |
BindingFlags.NonPublic | BindingFlags.FlattenHierarchy;
MemberInfo[] members = t.GetMembers(flags);
Console.WriteLine($"Type {t.Name} has {members.Length} members: ");
foreach (MemberInfo member in members)
{
string access = "";
string stat = "";
var method = member as MethodBase;
if (method != null)
{
if (method.IsPublic)
access = " Public";
else if (method.IsPrivate)
access = " Private";
else if (method.IsFamily)
access = " Protected";
else if (method.IsAssembly)
access = " Internal";
else if (method.IsFamilyOrAssembly)
access = " Protected Internal ";
if (method.IsStatic)
stat = " Static";
}
string output = $"{member.Name} ({member.MemberType}): {access}{stat}, Declared by {member.DeclaringType}";
Console.WriteLine(output);
}
}
}
// The example displays the following output:
// Type SimpleClass has 9 members:
// ToString (Method): Public, Declared by System.Object
// Equals (Method): Public, Declared by System.Object
// Equals (Method): Public Static, Declared by System.Object
// ReferenceEquals (Method): Public Static, Declared by System.Object
// GetHashCode (Method): Public, Declared by System.Object
// GetType (Method): Public, Declared by System.Object
// Finalize (Method): Internal, Declared by System.Object
// MemberwiseClone (Method): Internal, Declared by System.Object
// .ctor (Constructor): Public, Declared by SimpleClass
種別的隱含擔當可以讓 SimpleClass
類別利用這些方式:
輸入 敕令,以編譯和執行類型。
,這些終結實由履行階段的垃圾收集器呼喚,用於銷毀類別的實例。
public class EmptyClass
{ }
public class ClassNameExample
{
public static void Main()
{
EmptyClass sc = new();
Console.WriteLine(sc.ToString());
}
}
// The example displays the following output:
// EmptyClass
下表列出您可以在 C# 中建樹的類型種別,和其隱含繼承的起原類型。
受保護的 方式,這個方法會建立目前 對象的淺層複製品。 以下成員不會擔當:
不是基類的所有成員都是由衍生種別繼續。
執行規範
該頁面還會偵測您的平臺,並且應當供給合適您系統的正確保持。 這樣會開啟 Visual Studio 程式代碼,並扣問您是不是要安裝或啟用延長模組。
- 從 ,然後按兩下以執行它。
- 按兩下 擴充功能頁面上的 [安裝] 按鈕。 下載頁面會偵測您的平臺,並建議您平臺的最新安裝程式。
成員只有在與基類位於溝通組件的衍生種別中才可見。
衍生類別位於與基類不同的元件中,是以無法看到它們。若要在本教學課程中創立並執行規範,您可以從饬令行使用 公用程式。 針對每個範例,請遵守下列步調:
-
備註
public class A { public void Method1() { // Do something. } } public class B : A { public override void Method1() // Generates CS0506. { // Do something else. } }
在某些環境下,衍生種別 必需 覆寫基類實作。 以 環節詞標示的基類成員需要衍生種別重寫它們。
嘗試編譯下列典範會產生編譯程式毛病 CS0534:「<類別> 不會實作繼續的抽象成員 <成員>」,因為 類別B
不提供A.Method1
的實作。,您會呼叫這個建構函式來建樹 類別的新實例。
每一個種別都必需界說本身的建構函式。
本篇文章引用自此: https://learn.microsoft.com/zh-tw/dotnet/csharp/fundamentals/tutorials/inheritance
近期公可可轉債資訊:昇陽半導體二發行日期:2025-01-22、耀登二發行日期:2025-01-10、六方科一KY發行日期:2025-01-15、揚秦一發行日期:2025-01-15、皇普四發行日期:2025-01-17、亞力二發行日期:2025-01-13、博智一發行日期:2025-01-10、旺矽五發行日期:2025-01-08、上曜六發行日期:2024-12-27、皇普三發行日期:2024-12-31、華星光四發行日期:2024-12-25、新美齊四發行日期:2024-12-25、三地開發一發行日期:2024-12-19、jpp三KY發行日期:2024-11-04、倍力一發行日期:2024-11-04
離婚證人
結婚證人
法拍屋 、台北法拍屋 、新北市法拍屋 、桃園法拍屋
消逝演藝圈10年!女星生日慘被下藥綁架:遭強橫4周
北市永康街試辦假日徒步區 這些車輛不受影響仍可進出
dotnet restore
敕令在合適進行明白還原的特定案例中仍可派上用處,例如 ,或在需要明確節制何時進行還原的組建系統中。
成員只能在其基類巢狀的衍生種別中顯示。 不然,在衍生種別中看不到它們。不過,假如您從 C.GetValue
方法中移除批注,並測驗考試編譯此規範,它會產生編譯程序錯誤 CS0122:“'A._value' 由於其保護品級而沒法存取。 私家 A._value
欄位會顯示在 A.B 中。
A.B
是衍生自 A
的巢狀類別,C
衍生自 A
。