由於我剛剛接觸到構造函數主題,因此我對使用它的原因有一些疑惑。聲明一個構造函數和不聲明它有什麼不同?C#構造函數聲明
Q
C#構造函數聲明
-1
A
回答
3
構造函數用於初始化類對象。如果你不聲明/定義它,那麼將爲你創建一個默認的構造函數。
2
如果你沒有聲明任何構造函數,編譯器將生成沒有參數的默認構造函數。
考慮這個類:
public Class X
{
public int A { get; set; }
}
在有沒有構造函數聲明,所以編譯器會把默認的構造函數在類是這樣的:
public Class X
{
public int A { get; set; }
public X()
{
}
}
如果你在類中聲明構造函數中,將不會生成默認構造函數。
public Class X
{
public int A { get; set; }
public X (int a)
{
// do something
}
}
在此示例中,將不會生成默認的空構造函數。 如果您嘗試創建這樣一個實例:
X obj = new X();
它會生成編譯錯誤。
2
有聲明一個公共的無參數的構造函數只是調用基類的公共的無參數的構造函數之間沒有區別:
public class Test
{
public Test() : base() {}
}
等同於:
public class Test
{
}
編譯器提供了一個默認construc爲你的。
(和base()
部分是隱含的。如果你不明確鏈到另一個構造函數,編譯器將其當作如果你試圖鏈的參數的基類構造函數)
但這並不意味着構造函數是無用的......你通常會把代碼放在那裏。通常它複製參數:
public class Test
{
private readonly string name;
public Test(string name)
{
this.name = name;
}
}
...但構造函數大多可以包含與普通方法相同的代碼。值得注意的是,當你的構造函數運行時,雖然對象可能不是完全初始化,因爲派生類的構造函數體尚未執行。出於這個原因,建議不要在構造函數中調用虛擬方法。
有關實例構造函數的詳細信息,請參見C#5規範的第10.11節;關於默認構造函數的詳細信息,請參見第10.11.4節。
更具體而言,它將鏈,如果你寫base()
。如果沒有無參數的構造函數,但有是的構造函數,其參數都是可選的,將被調用。
1
構造函數被用於許多事情的類。
如果您想對類的實例進行初始化。
public class MyClass { private string myWork = string.Empty; public MyClass() { myWork = "Started"; } }
如果你想limitize範圍對象創建
類public class MyClass { private string myWork = string.Empty; protected MyClass() { myWork = "Started"; } }
還有許多其他的東西像基類的支持和其他人。請在MSDN上搜索。
相關問題
- 1. C++。奇怪的構造函數聲明?
- 2. 使用構造函數聲明(構造函數?)
- 3. SFINAE重複的構造函數聲明
- 4. 類的構造函數聲明
- 5. 如何聲明構造函數?
- 6. 在構造函數中聲明方法
- 7. 聲明在構造函數中
- 8. 構造函數首先聲明
- 9. 函數聲明,而不是用C調用構造++
- 10. 初始化私有對象在聲明或構造函數,C#
- 11. 只聲明C++中的默認構造函數
- 12. 不使用它的構造函數的C++類聲明
- 13. C++/CLI,類聲明之外的靜態構造函數
- 14. 在Java中,方法/構造函數聲明能否出現在另一個方法/構造函數聲明中?
- 15. 構造函數nulltpr_t:函數定義不聲明參數
- 16. C++前向聲明和析構函數
- 17. Javascript構造函數中的函數聲明的差異
- 18. C++函數聲明
- 19. C#構造函數
- 20. 作爲構造函數參數的構造函數調用將聲明作爲函數指針進行評估
- 21. 不能構造LINQ聲明
- 22. 構造函數和析構函數 - C++
- 23. C++類構造函數/析構函數
- 24. 聲明一個具有類構造函數作爲函數參數的函數
- 25. 構造函數的參數後的這個聲明
- 26. 在Object的構造函數中聲明Object的數組?
- 27. 如何聲明圖的數據構造函數
- 28. 將數組傳遞給構造函數而不聲明它?
- 29. 如何將特徵聲明爲隱式「構造函數參數」?
- 30. C++數據結構聲明
http://en.wikipedia.org/wiki/Constructor_%28object-oriented_programming%29 –
[構造函數(C#編程指南)](http://msdn.microsoft.com/zh-cn/library/vstudio/ ace5hbzh.aspx) – phoog