के लिए सामान्य वर्ग डाली मैं वर्गों निम्नलिखित है:ग # - इसके आधार गैर सामान्य वर्ग
public abstract class CustomerBase
{
public long CustomerNumber { get; set; }
public string Name { get; set; }
}
public abstract class CustomerWithChildern<T> : CustomerBase
where T: CustomerBase
{
public IList<T> Childern { get; private set; }
public CustomerWithChildern()
{
Childern = new List<T>();
}
}
public class SalesOffice : CustomerWithChildern<NationalNegotiation>
{
}
SalesOffice सिर्फ कुछ वर्गों जो ग्राहक पदानुक्रम के विभिन्न स्तरों का प्रतिनिधित्व करते हैं में से एक है। अब मुझे इस पदानुक्रम से कुछ बिंदु (ग्राहकबेस) से घूमने की जरूरत है। मैं प्रतिबिंब का उपयोग किए बिना कार्यान्वित करने का तरीका नहीं समझ सकता। मैं कुछ इस तरह कार्यान्वित करना चाहता हूं:
public void WalkHierarchy(CustomerBase start)
{
Print(start.CustomerNumber);
if (start is CustomerWithChildern<>)
{
foreach(ch in start.Childern)
{
WalkHierarchy(ch);
}
}
}
क्या कोई मौका है कि मैं इस काम की तरह कुछ प्राप्त कर सकता हूं?
सुझाव के आधार पर समाधान है-childern इंटरफ़ेस मैं कार्यान्वित:
public interface ICustomerWithChildern
{
IEnumerable ChildernEnum { get; }
}
public abstract class CustomerWithChildern<T> : CustomerBase, ICustomerWithChildern
where T: CustomerBase
{
public IEnumerable ChildernEnum { get { return Childern; } }
public IList<T> Childern { get; private set; }
public CustomerWithChildern()
{
Childern = new List<T>();
}
}
public void WalkHierarchy(CustomerBase start)
{
var x = start.CustomerNumber;
var c = start as ICustomerWithChildern;
if (c != null)
{
foreach(var ch in c.ChildernEnum)
{
WalkHierarchy((CustomerBase)ch);
}
}
}
यह सबसे अच्छा समाधान है के रूप में यह चलने कार्यान्वयन समाहित और सिर्फ फोन करने वाले के लिए मजबूर कार्यान्वयन विवरण के बारे में पता होने के लिए बिना सही काम करता है। – recursive
नामित किसी व्यक्ति से उच्च प्रशंसा, "रिकर्सिव"। ;-) –
मेरी आखिरी बड़ी .NET परियोजना की एक समान आवश्यकता थी, और जॉन सॉंडर्स का तरीका उतना ही है जितना मैंने किया था। कई चीजें बहुत आसान बना दिया :) – OregonGhost