मैं C # का उपयोग करता हूं, और ये मेरे दृष्टिकोण हैं। विचार करें:
class Foo
{
// private fields only to be written inside a constructor
private readonly int i;
private readonly string s;
private readonly Bar b;
// public getter properties
public int I { get { return i; } }
// etc.
}
विकल्प 1. वैकल्पिक मापदंडों के साथ कंस्ट्रक्टर
public Foo(int i = 0, string s = "bla", Bar b = null)
{
this.i = i;
this.s = s;
this.b = b;
}
उदाहरण के लिए प्रयुक्त new Foo(5, b: new Bar(whatever))
। 4.0 से पहले जावा या सी # संस्करणों के लिए नहीं। लेकिन फिर भी दिखाने लायक है, क्योंकि यह एक उदाहरण है कि कैसे सभी समाधान भाषा अज्ञेय नहीं हैं।
विकल्प 2. एकल पैरामीटर ऑब्जेक्ट लेने वाला कंस्ट्रक्टर
public Foo(FooParameters parameters)
{
this.i = parameters.I;
// etc.
}
class FooParameters
{
// public properties with automatically generated private backing fields
public int I { get; set; }
public string S { get; set; }
public Bar B { get; set; }
// All properties are public, so we don't need a full constructor.
// For convenience, you could include some commonly used initialization
// patterns as additional constructors.
public FooParameters() { }
}
उपयोग उदाहरण:
FooParameters fp = new FooParameters();
fp.I = 5;
fp.S = "bla";
fp.B = new Bar();
Foo f = new Foo(fp);`
3.0 पर C # से यह वस्तु इनिशियलाइज़र सिंटैक्स के साथ और अधिक सुरुचिपूर्ण बनाता है (शब्दार्थ पिछले उदाहरण के बराबर):
FooParameters fp = new FooParameters { I = 5, S = "bla", B = new Bar() };
Foo f = new Foo(fp);
विकल्प 3:
अपनी कक्षा को इतनी बड़ी संख्या में मापदंडों की आवश्यकता नहीं है। आप इसकी रिपॉजेंसी को कई वर्गों में विभाजित कर सकते हैं। या निर्माणकर्ता को नहीं बल्कि मांग पर, केवल विशिष्ट तरीकों के लिए मापदंडों को पास करें। हमेशा व्यवहार्य नहीं है, लेकिन जब यह है, यह करने योग्य है।