如果有多個構造函數,調用其中一個構造函數的優點是什麼? 謝謝由其他調用構造函數
0
A
回答
6
相同的優點,當你做方法重載:如果您想通過默認值基本構造你不要重複相同的代碼
public class Person
{
public Person(string name,string lastName)
{
Name = name;
LastName = lastName;
}
public Person(string name, string lastName,string address):this(name,lastName)
{
//you don't need to set again Name and Last Name
//as you can call the other constructor that does the job
Address = Address;
}
public string Name { get; set; }
public string LastName { get; set; }
public string Address { get; set; }
}
8
你不重複自己。
實現一個構造函數的改變也會立即影響所有其他的構造函數。 複製和粘貼代碼不好,應該避免。你
+0
相關:http://stackoverflow.com/questions/2490884/why-is-copy-and-paste-of-code-dangerous/2490897#2490897 – Oded 2012-02-08 15:52:03
1
。
public class YourClass
{
private int SomeInt;
public YourClass() : this(0)
{
// other possible logic
}
public YourClass(int SomeNumber)
{
SomeInt = SomeNumber;
}
}
這遵循了DRY原則(不要重複自己)。一個簡單的例子,但它應該說明這個想法。
1
我使用它時,我想將默認值或空值傳遞給其他構造函數。在上面的情況下,用戶在調用構造函數時不必傳遞null - 他們可以不用任何東西來調用它。
public class Widget(){
public Widget() : this(null){
}
public Widget(IRepository rep){
this.repository = rep;
}
}
3
縱觀已經發布的答案我只是將它們與您總是走的方式,從默認的構造函數下降到最專業的構造函數。試圖做同樣的其他方式總是導致代碼複製或問題:
的好辦法:
public class Foo()
{
public Foo()
: this(String.Empty)
{ }
public Foo(string lastName)
: this(lastName, String.Empty)
{ }
public Foo(string lastName, string firstName)
: this(lastName, firstName, 0)
{ }
public Foo(string lastName, string firstName, int age)
{
LastName = lastName;
FirstName = firstName;
Age = age;
_SomeInternalState = new InternalState();
}
}
糟糕的方法:
public class Foo()
{
public Foo(string lastName, string firstName, int age)
: this(lastName, firstName)
{
Age = age;
}
public Foo(string lastName, string firstName)
: this(lastName)
{
FirstName = firstName;
}
public Foo(string lastName)
: this()
{
LastName = lastName;
}
public Foo()
{
_SomeInternalState = new InternalState();
}
}
的問題第二個例子是該部分如何處理所有的參數現在已經混淆了所有的構造函數,而只是實現了一個(最專業的)。試想一下,你喜歡從這個課程中派生出來。在第二個示例中,您必須覆蓋所有構造函數。在第一個示例中,您只需重寫最專業的構造函數即可完全控制每個構造函數。
相關問題
- 1. 構造函數調用其他構造函數
- 2. 如何在其他構造函數中調用構造函數?
- 3. 構造函數中的調用基構造函數和其他構造函數
- 4. 構造函數調用vb.net其他構造一拉C#
- 5. 如何從c#中的構造函數調用其他構造函數?
- 6. 調用其他構造函數的構造函數:任何性能問題?
- 7. 重載構造函數根據輸入類型調用其他構造函數
- 8. 無理由調用構造函數
- 9. 與其他類常數值調用構造函數
- 10. 首先調用虛擬基類的構造函數,然後按順序調用其他類的構造函數
- 11. 如何在調用其他構造函數之前拋出ArgumentNullException
- 12. Java - 擴展似乎是調用其他類的構造函數
- 13. 確定一個構造函數調用其基類的構造
- 14. 構建其他對象構造函數的對象構造函數
- 15. 如何從其參數化構造函數調用構造函數?
- 16. 構造函數注入與其他非依賴構造函數參數
- 17. 一個類的構造函數,爲其他..將調用什麼函數?
- 18. 無參數構造函數調用2參數構造函數
- 19. 爲什麼複製構造函數調用其他類的默認構造函數?
- 20. Java調用構造函數
- 21. 調用構造函數
- 22. 調用構造函數從
- 23. 構造函數調用
- 24. Java構造函數調用
- 25. C#調用構造函數
- 26. 調用構造函數
- 27. CodeDom調用構造函數
- 28. 調用構造函數
- 29. 調用構造函數
- 30. 構造函數調用
那麼,從另一個調用一個*方法的優點是什麼?構造函數只是*方法*,它們在生成'new'運算符的結果之前被調用。 – 2012-02-08 16:05:43