मैं गतिशील जोड़ने कर रहा हूँ और क्रमफैक्ट्री पैटर्न में इंटरफेस के साथ विरासत को कैसे बदला जा सकता है?
पर एक WinForm पैनल में नियंत्रण की जगह यहां तक कि सभी कार्यों मैं नहीं बल्कि एक baseUserControl से इनहेरिट से इंटरफेस को लागू करने को कहा गया है, हालांकि।
मैं इसके लिए सभी हूँ, लेकिन मैं न देखते हैं कि कैसे मैं मैं इंटरफेस
मैं अपने फैक्टरी कोड होगा कैसे का उपयोग कर एक ही परिणाम प्राप्त कर सकते हैं?
यह कैसे सुधार किया जा सकता है और इसके बजाय इंटरफेस का उपयोग कैसे किया जा सकता है?
//Simplified noddy example
//Client code
var controlA = ControlFactory
.Create("UserControlA") as UserControlA;
panel1.Controls.Add(ControlA);
//Factory
public class ControlFactory
{
public static BaseUserControl Create(string name)
{
switch (name)
{
case "UserControlA":
var userControlA = new UserControlA();
return userControlA;
case "UserControlB":
var userControlB = new UserControlB();
return userControlB;
}
return null;
}
}
//BaseUserControl
public partial class BaseUserControl : UserControl
{
public BaseUserControl()
{
InitializeComponent();
}
public virtual void DoSomething()
{
}
}
public partial class UserControlA : BaseUserControl
{
public UserControlA()
{
InitializeComponent();
}
public override void DoSomething()
{
//Do something here
}
}
public partial class UserControlB : BaseUserControl
{
public UserControlB()
{
InitializeComponent();
}
public override void DoSomething()
{
//Do something here
}
}
http://codereview.stackexchange.com/ – GolfWolf
क्यों के लिए एक सवाल की तरह लग रहा है? बेस क्लास पर इंटरफेस का उपयोग करने का क्या फायदा होगा? – Oded
ये अनन्य नहीं हैं। आपका IUserControl DoSomething() घोषित कर सकता है, और आप IUserControl को लागू करने के रूप में बेसकंट्रोल को कार्यान्वित कर सकते हैं (और कारखाने से IUserControl वापस कर सकते हैं)। – Joe