1.C#中定義接口所使用的關鍵字是:interface
2.C#是一種純粹面向對象語言。面向對象語言具有的特點是:繼承、封裝、多態。
3.值類型和引用類型的區別:
CLR支持兩種類型,引用類型和值類型。這兩種類型的不同之處是,他們在.NET類層次結構中的位置不同,那麼.NET為其分配的內存的方式也是不同的。
引用類型和值類型都繼承自Systerm.Object類。不同之處,幾乎所有的引用類型都是直接從Systerm.Object繼承,而值類型則是繼承Systerm.Object的子類Systerm.ValueType類。
引用類型和值類型的內存分配,差別在於CLR是如何處理它們的內存需求。值類型在運行是(托管棧)中分配,而引用類型放在(托管堆)中,托管棧將引用托管堆。
4.類、對象、結構體的區別:
(1)struct 是值類型,class 是對象類型
(2)struct 不能被繼承,class 可以被繼承
(3)struct 默認的訪問權限是public,而class 默認的訪問權限是private.
(4)struct總是有默認的構造函數,即使是重載默認構造函數仍然會保留。這是因為Struct的構造函數是由編譯器自動生成的,但是如果重載構造函數,必需對struct中的變量全部初始化。並且Struct的用途是那些描述輕量級的對象,例如Line,Point等,並且效率比較高。class在沒有重載構造函數時有默認的無參數構造函數,但是一被重載些默認構造函數將被覆蓋。
(5)struct的new和class的new是不同的。struct的new就是執行一下構造函數創建一個新實例再對所有的字段進行Copy。而class則是在堆上分配一塊內存然後再執行構造函數,struct的內存並不是在new的時候分配的,而是在定義的時候分配
參考博客:(1)http://blog.csdn.net/dyllove98/article/details/9336367
(2)http://www.cnblogs.com/liuzijing688/archive/2008/01/11/1034893.html
5.抽象類、封閉類、靜態類的特點
(1) 抽象類與接口緊密相關,它們不能實例化,並且常常部分實現或根本不實現。抽象類和接口之間的一個主要差別是:類可以實現無限個接口,但僅能從一個抽象(或任何其他類型)類繼承。從抽象類派生的類仍可實現接口。可以在創建組件時使用抽象類,因為它們使您得以在某些方法中指定不變級功能,但直到需要該類的特定實現之後才實現其他方法。抽象類也制定版本,因為如果在派生類中需要附加功能,則可以將其添加到基類而不中斷代碼。
在 C# 中,使用 abstract 修飾符。
(2) 封閉類即密封類,主要是為了不想被繼承而設計的。在class前面用sealed修飾,代表私有的。
密封類不能用作基類。因此,它也不能是抽象類。密封類主要用於防止派生。由於密封類從不用作基類,所以有些運行時優化可以使對密封類成員的調用略快。
在對基類的虛成員進行重寫的派生類上的類成員、方法、字段、屬性或事件可以將該成員聲明為密封成員。在用於以後的派生類時,這將取消成員的虛效果。方法是在類成員聲明中將 sealed 關鍵字置於 override 關鍵字的前面。
(3) 靜態類和類成員用於創建無需創建類的實例就能夠訪問的數據和函數。靜態類成員可用於分離獨立於任何對象標識的數據和行為:無論對象發生什麼更改,這些數據和函數都不會隨之變化。當類中沒有依賴對象標識的數據或行為時,就可以使用靜態類。
類可以聲明為static的,以指示它僅包含靜態成員。不能使用 new 關鍵字創建靜態類的實例。靜態類在加載包含該類的程序或命名空間時由 .NET Framework 公共語言運行庫 (CLR) 自動加載。
使用靜態類來包含不與特定對象關聯的方法。例如,創建一組不操作實例數據並且不與代碼中的特定對象關聯的方法是很常見的要求。您應該使用靜態類來包含那些方法。
靜態類的主要功能如下:
它們僅包含靜態成員。
它們不能被實例化。
它們是密封的。
它們不能包含實例構造函數(C# 編程指南)。
因此創建靜態類與創建僅包含靜態成員和私有構造函數的類大致一樣。私有構造函數阻止類被實例化。
使用靜態類的優點在於,編譯器能夠執行檢查以確保不致偶然地添加實例成員。編譯器將保證不會創建此類的實利。
靜態類是密封的,因此不可被繼承。靜態類不能包含構造函數,但仍可聲明靜態構造函數以分配初始值或設置某個靜態狀態。
6.怎樣理解靜態變量和靜態方法?靜態構造函數的作用是什麼?
參考官方說法:http://msdn.microsoft.com/zh-cn/library/79b3xss3.aspx
非靜態類可以包含靜態的方法、字段、屬性或事件。 即使沒有創建類的實例,也可以調用該類中的靜態成員。 始終通過類名而不是實例名稱訪問靜態成員。 無論對一個類創建多少個實例,它的靜態成員都只有一個副本。 靜態方法和屬性不能訪問其包含類型中的非靜態字段和事件,並且不能訪問任何對象的實例變量(除非在方法參數中顯式傳遞)。
靜態方法可以被重載但不能被重寫,因為它們屬於類,不屬於類的任何實例。
雖然字段不能聲明為 static const,但 const 字段的行為在本質上是靜態的。 這樣的字段屬於類型,不屬於類型的實例。 因此,可以同對待靜態字段一樣使用 ClassName.MemberName 表示法來訪問 const 字段。 不需要對象實例。