C# 基礎知識 25個常見問題_第1頁
C# 基礎知識 25個常見問題_第2頁
C# 基礎知識 25個常見問題_第3頁
C# 基礎知識 25個常見問題_第4頁
C# 基礎知識 25個常見問題_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

1、.C# 基礎知識 25個常見問題 (1)2007-04-12 16:53當初學 C# 時是找個人大概問了一下數(shù)據(jù)類型和分支語句就開始做項目了。這兩天又全面的看了一下相關的基礎知識(學而時習之嘛),總結(jié)了25個問題: 1.靜態(tài)變量和非靜態(tài)變量的區(qū)別?2.const 和 static readonly 區(qū)別?3.extern 是什么意思?4.abstract 是什么意思?5.internal 修飾符起什么作用?6.sealed 修飾符是干什么的?7.override 和 overload 的區(qū)別?8.什么是索引指示器?9.new 修飾符是起什么作用?10.this 關鍵字的含義?11.可以使用抽象

2、函數(shù)重寫基類中的虛函數(shù)嗎?12.密封類可以有虛函數(shù)嗎?13.如果基類中的虛屬性只有一個屬性訪問器,那么繼承類重寫該屬性后可以有幾個屬性訪問器?如果基類中有 get 和 set 兩個呢?14.abstract 可以和 virtual 一起使用嗎?可以和 override 一起使用嗎?15.接口可以包含哪些成員?16.類和結(jié)構(gòu)的區(qū)別?17.接口的多繼承會帶來哪些問題?18.抽象類和接口的區(qū)別?19.別名指示符是什么?20.如何釋放非托管資源?21.P/Invoke是什么?22.StringBuilder 和 String 的區(qū)別?23.explicit 和 implicit 的含義?24.para

3、ms 有什么用?25.什么是反射? 以下是我做的一份參考答案(C# 語言范疇之內(nèi)),如果有不準確、不全面的,歡迎各位朋友指正!1.靜態(tài)變量和非靜態(tài)變量的區(qū)別?答:靜態(tài)變量:靜態(tài)變量使用 static 修飾符進行聲明在所屬類被裝載時創(chuàng)建通過類進行訪問所屬類的所有實例的同一靜態(tài)變量都是同一個值非靜態(tài)變量:不帶有 static 修飾符聲明的變量稱做非靜態(tài)變量在類被實例化時創(chuàng)建通過對象進行訪問同一個類的不同實例的同一非靜態(tài)變量可以是不同的值示例:using System;using System.Collections.Generic;using System.Text;namespace Examp

4、le01 class Program class Class1 public static String staticStr = Class; public String notstaticStr = Obj; static void Main(string args) /靜態(tài)變量通過類進行訪問,該類所有實例的同一靜態(tài)變量都是同一個值 Console.WriteLine(Class1s staticStr: 0, Class1.staticStr); Class1 tmpObj1 = new Class1(); tmpObj1.notstaticStr = tmpObj1; Class1 tm

5、pObj2 = new Class1(); tmpObj2.notstaticStr = tmpObj2; /非靜態(tài)變量通過對象進行訪問,不同對象的同一非靜態(tài)變量可以有不同的值 Console.WriteLine(tmpObj1s notstaticStr: 0, tmpObj1.notstaticStr); Console.WriteLine(tmpObj2s notstaticStr: 0, tmpObj2.notstaticStr); Console.ReadLine(); 結(jié)果:Class1s staticStr: ClasstmpObj1s notstaticStr: tmpObj1

6、tmpObj2s notstaticStr: tmpObj22.const 和 static readonly 區(qū)別?答: const用 const 修飾符聲明的成員叫常量,是在編譯期初始化并嵌入到客戶端程序static readonly用 static readonly 修飾符聲明的成員依然是變量,只不過具有和常量類似的使用方法:通過類進行訪問、初始化后不可以修改。但與常量不同的是這種變量是在運行期初始化示例:測試類:using System;using System.Collections.Generic;using System.Text;namespace Example02Lib p

7、ublic class Class1 public const String strConst = Const; public static readonly String strStaticReadonly = StaticReadonly; /public const String strConst = Const Changed; /public static readonly String strStaticReadonly = StaticReadonly Changed; 客戶端代碼:using System;using System.Collections.Generic;usi

8、ng System.Text;using Example02Lib;namespace Example02 class Program static void Main(string args) /修改Example02中Class1的strConst初始值后,只編譯Example02Lib項目 /然后到資源管理器里把新編譯的Example02Lib.dll拷貝Example02.exe所在的目錄,執(zhí)行Example02.exe /切不可在IDE里直接調(diào)試運行因為這會重新編譯整個解決方案! /可以看到strConst的輸出沒有改變,而strStaticReadonly的輸出已經(jīng)改變 /表明Co

9、nst變量是在編譯期初始化并嵌入到客戶端程序,而StaticReadonly是在運行時初始化的 Console.WriteLine(strConst : 0, Class1.strConst); Console.WriteLine(strStaticReadonly : 0, Class1.strStaticReadonly); Console.ReadLine(); 結(jié)果:strConst : ConststrStaticReadonly : StaticReadonly 修改后的示例:測試類:using System;using System.Collections.Generic;usi

10、ng System.Text;namespace Example02Lib public class Class1 /public const String strConst = Const; /public static readonly String strStaticReadonly = StaticReadonly; public const String strConst = Const Changed; public static readonly String strStaticReadonly = StaticReadonly Changed; 結(jié)果strConst : Con

11、ststrStaticReadonly : StaticReadonly Changed3.extern 是什么意思?答: extern 修飾符用于聲明由程序集外部實現(xiàn)的成員函數(shù)經(jīng)常用于系統(tǒng)API函數(shù)的調(diào)用(通過 DllImport )。注意,和DllImport一起使用時要加上 static 修飾符也可以用于對于同一程序集不同版本組件的調(diào)用(用 extern 聲明別名)不能與 abstract 修飾符同時使用示例:using System;using System.Collections.Generic;using System.Text;using System.Runtime.Inter

12、opServices;namespace Example03 class Program /注意DllImport是一個Attribute Property,在System.Runtime.InteropServices命名空間中定義 /extern與DllImport一起使用時必須再加上一個static修飾符 DllImport(User32.dll) public static extern int MessageBox(int Handle, string Message, string Caption, int Type); static int Main() string myStr

13、ing; Console.Write(Enter your message: ); myString = Console.ReadLine(); return MessageBox(0, myString, My Message Box, 0); 結(jié)果:4.abstract 是什么意思?答: abstract 修飾符可以用于類、方法、屬性、事件和索引指示器(indexer),表示其為抽象成員abstract 不可以和 static 、virtual 、override 一起使用聲明為 abstract 成員可以不包括實現(xiàn)代碼,但只有類中還有未實現(xiàn)的抽象成員,該類就不可以被實例化,通常用于強制繼

14、承類必須實現(xiàn)某一成員示例:using System;using System.Collections.Generic;using System.Text;namespace Example04 #region 基類,抽象類 public abstract class BaseClass /抽象屬性,同時具有get和set訪問器表示繼承類必須將該屬性實現(xiàn)為可讀寫 public abstract String Attribute get; set; /抽象方法,傳入一個字符串參數(shù)無返回值 public abstract void Function(String value); /抽象事件,類型為系

15、統(tǒng)預定義的代理(delegate):EventHandler public abstract event EventHandler Event; /抽象索引指示器,只具有get訪問器表示繼承類必須將該索引指示器實現(xiàn)為只讀 public abstract Char thisint Index get; #endregion #region 繼承類 public class DeriveClass : BaseClass private String attribute; public override String Attribute get return attribute; set attr

16、ibute = value; public override void Function(String value) attribute = value; if (Event != null) Event(this, new EventArgs(); public override event EventHandler Event; public override Char thisint Index get return attributeIndex; #endregion class Program static void OnFunction(object sender, EventArgs e) for (int i = 0; i (DeriveClass)sender).Attribute.Length; i+) Console.WriteLine(DeriveClass)sender)i); static void Main(string ar

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論