C#學習基礎概念二十五問第1/4頁

來源:互聯網
上載者:User

註:本文部份資料來自網路,如有侵權,請與我聯絡,我會在第一時間聲明引用或將其刪除!
當初學 C# 時是找個人大概問了一下資料類型和分支語句就開始做項目了。這兩天又全面的看了一下相關的基礎知識(學而時習之嘛),總結了25個問題:
1.靜態成員和非靜態成員的區別?
2.const 和 static readonly 區別?
3.extern 是什麼意思?
4.abstract 是什麼意思?
5.internal 修飾符起什麼作用?
6.sealed 修飾符是幹什麼的?
7.override 和 overload 的區別?
8.什麼是索引指標?
9.new 修飾符是起什麼作用?
10.this 關鍵字的含義?
11.可以使用抽象函數重寫基類中的虛函數嗎?
12.密封類可以有虛函數嗎?
13.什麼是屬性訪問器?
14.abstract 可以和 virtual 一起使用嗎?可以和 override 一起使用嗎?
15.介面可以包含哪些成員?
16.類和結構的區別?
17.介面的多繼承會帶來哪些問題?
18.抽象類別和介面的區別?
19.別名指示符是什嗎?
20.如何手工釋放資源?
21.P/Invoke是什嗎?
22.StringBuilder 和 String 的區別?
23.explicit 和 implicit 的含義?
24.params 有什麼用?
25.什麼是反射?
以下是我做的一份參考答案(C# 語言範疇之內),如果有不準確、不全面的,歡迎各位朋友指正!
1.靜態成員和非靜態成員的區別?
答:
靜態變數使用 static 修飾符進行聲明,在類被執行個體化時建立,通過類進行訪問
不帶有 static 修飾符聲明的變數稱做非靜態變數,在對象被執行個體化時建立,通過對象進行訪問
一個類的所有執行個體的同一靜態變數都是同一個值,同一個類的不同執行個體的同一非靜態變數可以是不同的值
靜態函數的實現裡不能使用非靜態成員,如非靜態變數、非靜態函數等 複製代碼 代碼如下:樣本:
using System;
using System.Collections.Generic;
using System.Text;
namespace Example01
{
class Program
{
class Class1
{
public static String staticStr = "Class";
public String notstaticStr = "Obj";
}
static void Main(string[] args)
{
//靜態變數通過類進行訪問,該類所有執行個體的同一靜態變數都是同一個值
Console.WriteLine("Class1's staticStr: {0}", Class1.staticStr);
Class1 tmpObj1 = new Class1();
tmpObj1.notstaticStr = "tmpObj1";
Class1 tmpObj2 = new Class1();
tmpObj2.notstaticStr = "tmpObj2";
//非靜態變數通過對象進行訪問,不同對象的同一非靜態變數可以有不同的值
Console.WriteLine("tmpObj1's notstaticStr: {0}", tmpObj1.notstaticStr);
Console.WriteLine("tmpObj2's notstaticStr: {0}", tmpObj2.notstaticStr);
Console.ReadLine();
}
}
}

結果:
Class1's staticStr: Class
tmpObj1's notstaticStr: tmpObj1
tmpObj2's notstaticStr: tmpObj2
2.const 和 static readonly 區別?
答:
const
用 const 修飾符聲明的成員叫常量,是在編譯期初始化並嵌入到用戶端程式
static readonly
用 static readonly 修飾符聲明的成員依然是變數,只不過具有和常量類似的使用方法:通過類進行訪問、初始化後不可以修改。但與常量不同的是這種變數是在運行期初始化
樣本:
測試類別:
using System;
using System.Collections.Generic;
using 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";
}
}
用戶端代碼:
using System;
using System.Collections.Generic;
using System.Text;
using Example02Lib;
namespace Example02
{
class Program
{
static void Main(string[] args)
{
//修改Example02中Class1的strConst初始值後,只編譯Example02Lib項目
//然後到資源管理員裡把新編譯的Example02Lib.dll拷貝Example02.exe所在的目錄,執行Example02.exe
//切不可在IDE裡直接調試運行因為這會重新編譯整個解決方案!!
//可以看到strConst的輸出沒有改變,而strStaticReadonly的輸出已經改變
//表明Const變數是在編譯期初始化並嵌入到用戶端程式,而StaticReadonly是在運行時初始化的
Console.WriteLine("strConst : {0}", Class1.strConst);
Console.WriteLine("strStaticReadonly : {0}", Class1.strStaticReadonly);
Console.ReadLine();
}
}
}
結果:
strConst : Const
strStaticReadonly : StaticReadonly
修改後的樣本:
測試類別:
using System;
using System.Collections.Generic;
using 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";
}
}
結果
strConst : Const
strStaticReadonly : StaticReadonly Changed

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.