जहां तक मुझे पता है कि ओवरलोडिंग कार्यों के तरीके से यह पता चलता है कि यह आपके द्वारा आपूर्ति किए जाने वाले पैरामीटर की मात्रा की जांच करता है और फिर जांचता है कि किस कन्स्ट्रक्टर का उपयोग करना है।
नहीं है, अधिक भार केवल मापदंडों के संख्या पर आधारित नहीं है - यह उनकी प्रकार भी पर आधारित है।
हालांकि:
निर्माताओं की दो के रूप में, एक ही हैं दोनों तार
एक समस्या है कि स्वीकार करता है। आप इस तरह दो कंस्ट्रक्टर्स की घोषणा नहीं कर सकते हैं:
public Foo(string x)
{
}
public Foo(string y)
{
}
उन हस्ताक्षरों जहाँ तक अधिक भार का संबंध है संघर्ष।
मैं सार्वजनिक स्थिर कारखाने तरीकों होने सुझाव है, तो आप क्या आप बनाने के लिए कोशिश कर रहे हैं निर्दिष्ट कर सकते हैं:
public static Foo FromGears(string gears)
{
return new Foo(...);
}
public static Foo FromMaximumSpeed(string maxSpeed)
{
return new Foo(...);
}
फिर आप संभवतः एक निर्माता जो दोनों मूल्यों को स्वीकार कर लिया होगा, और फ़ैक्टरी विधि से कन्स्ट्रक्टर को कॉल करते समय डिफ़ॉल्ट रूप से कोई भी गुम हो जाता है।
संपादित करें: ठीक है, अब हम एक थोड़ा और अधिक पता है, यहां बात की तरह है मेरा मतलब है:
public class Car
{
private const int DefaultGears = 5;
private const int DefaultTopSpeed = 180;
private readonly int gears;
private readonly int topSpeed;
public Car(int gears, int topSpeed)
{
this.gears = gears;
this.topSpeed = topSpeed;
}
public static Car CreateWithGears(int gears)
{
return new Car(gears, DefaultTopSpeed);
}
public static Car CreateWithTopSpeed(int topSpeed)
{
return new Car(topSpeed, DefaultGears);
}
}
ध्यान दें कि आप सकता है बहुत सी # 4 में उपयोग वैकल्पिक पैरामीटर और इस के लिए नामित किया गया तर्क :
public class Car
{
public const int DefaultGears = 5;
public const int DefaultTopSpeed = 180;
private readonly int gears;
private readonly int topSpeed;
public Car(int gears = DefaultGears, int topSpeed = DefaultTopSpeed)
{
this.gears = gears;
this.topSpeed = topSpeed;
}
}
फिर
:
Car car = new Car(gears: 4);
Car car = new Car(topSpeed: 30);
मैं सामान्य रूप से अनुशंसा नहीं करता हूं - निश्चित रूप से नहीं, जबकि आप अभी भी भाषा के लिए अपेक्षाकृत नए हैं। वैकल्पिक पैरामीटर के आसपास विभिन्न subtleties हैं।
मुझे लगता है कि आप असाइनमेंट को गलत तरीके से पढ़ते हैं: आप एक स्ट्रिंग के रूप में गियर (संख्या) या अधिकतम गति (एक संख्या) की मात्रा में क्यों गुजरेंगे? लेकिन यह अवलोकन समस्या को हल नहीं करता है। आपका संदेह अनिवार्य रूप से सही है - यह संदिग्ध है कि क्या एक अच्छा ओओपी डिज़ाइन यहां रचनाकारों का उपयोग करेगा। –
क्या आपका * असाइनमेंट * कन्स्ट्रक्टर का उपयोग करने के लिए है, या यह * * असाइनमेंट * को असाइन करने का आपका तरीका है? –
ऐसा लगता है कि अस्पष्टता का कारण बनता है। यकीन नहीं है कि यह भी संभव है। –