1、C# 的三大特性? 封裝、繼承、多態 2、簡述 private、 protected、 public、 internal 修飾符的訪問許可權。 private : 私有成員, 在類的內部才可以訪問。 protected : 保護成員,該類內部和繼承類中可以訪問。 public : 公共成員,完全公 ...
1、C# 的三大特性?
封裝、繼承、多態
2、簡述 private、 protected、 public、 internal 修飾符的訪問許可權。
private : 私有成員, 在類的內部才可以訪問。
protected : 保護成員,該類內部和繼承類中可以訪問。
public : 公共成員,完全公開,沒有訪問限制。
internal: 當前程式集內可以訪問。
3、介面和類的區別
介面:不能實例化,方法也沒有具體的實現,被繼承時,繼承類必須實現介面的所有方法。
類:可以被實例化,被繼承時,繼承類也不需要重新實現被繼承類中的方法。但是如果被繼承類的方法中有abstract修飾的,繼承類則需要實現這個方法。
4、在對象比較中,對象一致和對象相等分別是指什麼?
對象一致指的是引用相同。對象相等指的是內容相等。
5、ref修飾參數和out修飾參數的區別
ref、out都可以從函數內部傳出值,區別是,ref修飾的參數必須先初始化、而out不用
6、C#中String和string有什麼區別?
- string是C#中的類,String是Framework的類,
- 如果寫的是string,在編譯的時候編譯器會把他轉換為String。所以直接使用String會讓編譯器少做工作,可以提高一下性能。
- 在C#中建議使用string,比較符合規範 。
- 在C#中string是關鍵字,而String不是。
7、 const和readonly兩者區別?
const:
- 編譯時常量
- 本身就是靜態變數
- 只能定義基本類型,如int,string等等
- 在聲明的時候必須初始化,且不能修改
readonly:
- 運行時常量
- 不是靜態變數,如果需要需加上“static”關鍵字
- 可以定義一切類型
- 可以延遲到構造函數初始化
8、public static const int A = 1; 這段代碼有錯誤嗎
錯誤:const 不能被修飾為 static
因為定義為常量(const)後就是靜態的(static)
9、try {}里有一個return語句,那麼緊跟在這個try後的finally {}里的code會不會被執行,什麼時候被執行,在return前還是後?
會執行,在return前執行。
10、string str = null 與 string str = "" 的區別
string str = null 是不給他分配記憶體空間,而 string str = "" 給它分配長度為空字元串的記憶體空間。
string str = null 沒有 string 對象,string str = "" 有一個字元串對象。
11、什麼叫做泛型?
泛型就是參數化類型
泛型的作用是減少重覆代碼
12、什麼是反射?
動態獲取程式集信息、對象信息。
13、裝箱和拆箱
裝箱是將值類型轉化為引用類型的過程;
拆箱是將引用類型轉化為值類型的過程
14、2+5+”8” 得到的結果是什麼
從左向右運算,int + string 是 string,所以是 “78”
擴展:”8”+2+5 是”825”,而 “8”+(2+5)是 “87”
15、a=10,b=15,請在不使用第三方變數的情況下,把a、b的值互換
int a = 10; int b = 15; a += b; b = a - b; a -= b; Console.WriteLine("a={0}\r\nb={1}", a, b);
16、現有 1~10 共十個自然數,已隨機放入一個有 8 個元素的數組 nums[8]
int[] numbers= { 3, 9, 8, 2, 4, 6, 10, 7 };
要求寫出一個儘量簡單的方案,找出沒有被放入數組的那 2 個數,並列印這 2 個數。
int[] numbers = { 3, 9, 5, 2, 1, 6, 10, 7 }; for (int i = 1; i <= 10; i++) { //通過使用預設的相等比較器確定序列是否包含指定的元素。 if (!numbers.Contains(i)) { Console.WriteLine(i); } }
17、請編程實現一個冒泡排序演算法?
int[] array = { 1, 3, 5, 7, 13, 2, 4, 6, 8, 10 }; for (int i = 0; i < array.Length; i++) { for (int j = 0; j < array.Length - 1 - i; j++) { if (array[j] > array[j + 1]) { int temp = array[j]; array[j] = array[j + 1]; array[j + 1] = temp; } } } Console.WriteLine("冒泡排序"); foreach (var t in array) { Console.WriteLine($"{t}"); }
18、產生一個int數組,長度為100,並向其中隨機插入1-100,並且不能重覆?
var list = new List<int>(); var random = new Random(); while (true) { var temp2 = random.Next(1, 101); if (list.Count == 100) { break; } if (!list.Contains(temp2)) { list.Add(temp2); } } foreach (var t in list) { Console.Write(t + ","); }