1、靜態類和靜態成員有哪些功能特性? 實現代碼?
靜態類和靜態成員是指使用static關鍵字定義的類或成員,凡是static類的成員一定是static成員,不然會報錯的。靜態類和成員的一大特點就是它們是獨一無二的。如果是static類,那麼它是不能執行個體化的,而且載入在記憶體中只有一個;如果是static變數,方法,這個類可以被執行個體化的話,無論執行個體化多少次,static變數或方法始終只有一個。
如下:
(1)、靜態成員
public class StatTicMember { public static string testA = string.Empty; } class Program { static void Main(string[] args) { //StaticConstruct strc = new StaticConstruct(); //StaticConstruct strcValue = new StaticConstruct(string.Empty); StatTicMember sMember1 = new StatTicMember(); StatTicMember.testA = @"靜態成員"; Console.WriteLine(StatTicMember.testA); StatTicMember sMember2 = new StatTicMember(); Console.WriteLine(StatTicMember.testA); Console.ReadLine(); } }
結果:
靜態成員特點:
a、必須通過類名引用,不能用類的對象來引用;
b、無論類被執行個體化多少次,在記憶體中只有同一塊地區;
c、靜態方法中如果引用方法外的變數或方法,它們也必須是靜態,如
public class StatTicMember { public static string testA = string.Empty; public string testB = string.Empty; public static void Method() { testA = @"my";//正確 //testB = @"my";//錯誤 } }
(2)、靜態類
public static class StaticClass { public static string testA = string.Empty; public static void StaticMethod() { Console.WriteLine(@"靜態方法"); } } class Program { static void Main(string[] args) { StaticClass.testA = @"靜態類"; Console.WriteLine(StaticClass.testA); StaticClass.StaticMethod(); Console.ReadLine(); } }
結果:
靜態類特點:
a、成員必須也是靜態;
b、不能別執行個體化,引用內部成員直接用類名;
c、是密封類;(註:密封類是指這個類不能用作基類,不能是抽象類別,也就是不能派生。)
d、不能包含建構函式。
靜態類和成員使用場合,靜態類不能泛濫使用,因為它一旦載入了,就在記憶體中有一塊地區,不論你用或不用,它都在那裡。佔用了記憶體。如下場合可以使用:
a、全域的變數,整個工程中都用到的一個變數,而且值不輕易改變,即使改變所有模組都必須要做出反應。
b、不操作執行個體資料,不與代碼中特定類關聯的方法,比如Math類中的一些方法。
2、密封類功能特性? 實現代碼? 為什麼要使用密封類?
密封類是指用sealed關鍵字修飾的一種類,它的目的是防止派生,也就是這種類不能被繼承。
特點:
不能用作基類,不能抽象,密封類的調用比較快。
public sealed class SealedClass { public string testA = string.Empty; }
3、什麼是抽象類別? 功能特性? 實現代碼? 介面與抽象類別的區別?
抽象類別是指用abstract關鍵字修飾的類。作用是派生多個類,共用基類的公用方法和屬性。
public abstract class AbstractClass { public abstract void CommonMethod(); } public class ChildClass1 : AbstractClass { public override void CommonMethod() { Console.WriteLine(@"實現公用方法1"); } } public class ChildClass2 : AbstractClass { public override void CommonMethod() { Console.WriteLine(@"實現公用方法2"); } } class Program { static void Main(string[] args) { ChildClass1 chc1 = new ChildClass1(); chc1.CommonMethod(); ChildClass2 chc2 = new ChildClass2(); chc2.CommonMethod(); Console.ReadLine(); } }
結果:
抽象類別和介面的區別:
a、類是對對象的抽象,可以把抽象類別理解為把類當作對象,抽象成的類叫做抽象類別。而介面只是一個行為的規範或規定,微軟的自訂介面總是後帶able欄位,證明其是表述一類類“我能做...”.抽象類別更多的是定義在一系列緊密相關的類間,而介面大多數是關係疏鬆但都實現某一功能的類中;
b、介面基本上不具備繼承的任何具體特點,它僅僅承諾了能夠調用的方法;
c、一個類一次可以實現若干個介面,但是只能擴充一個父類;
d、介面可以用於支援回調,而繼承並不具備這個特點;
e、抽象類別不能被密封;
f、抽象類別實現的具體方法預設為虛的,但實現介面的類中的介面方法卻預設為非虛的,當然也可以聲明為虛的;
g、(介面)與非抽象類別類似,抽象類別也必須為在該類的基類列表中列出的介面的所有成員提供它自己的實現。但是,允許抽象類別將介面方法映射到抽象方法上;
h、抽象類別實現了oop中的一個原則,把可變的與不可變的分離。抽象類別和介面就是定義為不可變的,而把可變的交給子類去實現;
i、好的介面定義應該是具有專一功能性的,而不是多功能的,否則造成介面汙染。如果一個類只是實現了這個介面的中一個功能,而不得不去實現介面中的其他方法,就叫介面汙染;
j、如果抽象類別實現介面,則可以把介面中方法映射到抽象類別中作為抽象方法而不必實現,而在抽象類別的子類中實現介面中方法。
以上就是以上就是的內容,更多相關內容請關注topic.alibabacloud.com(www.php.cn)!的內容,更多相關內容請關注topic.alibabacloud.com(www.php.cn)!