बेवकूफ शीर्षक के बारे में क्षमा करें, यह नहीं पता था कि यहसी #: एक गैर-जेनेरिक वर्ग के भीतर दो अमूर्त सूचियों का कार्यान्वयन?
मैं एक वर्ग बना रहा हूं जिसमें एक ही प्रकार की दो सूचियां हैं। इसका उपयोग दूसरी सूची में पहली सूची में ऑब्जेक्ट के संदर्भ की प्रतिलिपि बनाने के लिए किया जाता है।
हालांकि दोनों सूचियां एक ही प्रकार के होंगी (उसी प्रकार की वस्तु को पकड़ें) यह कक्षा प्रत्येक बार प्रारंभ होने पर अलग हो सकती है।
तो मुझे लगता है कि मुझे सूची प्रकारों को किसी प्रकार की सार सूची के रूप में बनाना चाहिए। मैं यह सुनिश्चित करना चाहता हूं कि इंस्टेंट किए जाने पर उन्हें दृढ़ता से टाइप किया जाएगा (लेकिन समस्याग्रस्त होने पर उत्तराधिकारी नहीं)। समस्या उस विधि के अंदर है जो चयनित आइटम को सूची 1 से सूची 2 में परिवर्तित करती है, सार सूची प्रकार सामान्य रूप से इसके लिए विधियां नहीं होती हैं।
मुझे लगता है कि सामान्य समाधान क्लास जेनेरिक (क्लासनाम <T>
चीज़) बनाना होगा, लेकिन मुझे यकीन नहीं है कि मैं ऐसा कर सकता हूं (कम से कम मुझे नहीं पता कि कैसे) क्योंकि इस वर्ग को एक WPF UserControl प्राप्त होता है।
public partial class SubsetSelectionLists : UserControl
{
public static DependencyProperty SetCollectionProperty = DependencyProperty.Register("SetCollection", typeof("Need a abstract list type here"), typeof(SubsetSelectionLists));
public static DependencyProperty SubsetCollectionProperty = DependencyProperty.Register("SubsetCollection", typeof("Need a abstract list type here"), typeof(SubsetSelectionLists));
public "Need a abstract list type here" SetCollection
{
get
{
return ("Need a abstract list type here") GetValue(SetCollectionProperty);
}
set
{
SetValue(SetCollectionProperty, value);
}
}
public "Need a abstract list type here" SubsetCollection
{
get
{
return ("Need a abstract list type here")GetValue(SubsetCollectionProperty);
}
set
{
SetValue(SubsetCollectionProperty, value);
}
}
public SubsetSelectionLists()
{
InitializeComponent();
SubsetSelectiongrid.DataContext = this;
}
private void selectionBtnClick(object sender, RoutedEventArgs e)
{
SubsetCollection.AddTheseItems(SET.SelecctedItems)
}
private void removeBtnClick(object sender, RoutedEventArgs e)
{
SUBSET.RemoveTheseItems(SUBSET.SelectedItem);
}
}
संपादित करें: समाधान
कुछ जवाब मुझे एक सामान्य वर्ग बनाने के इष्टतम समाधान की दिशा में इशारा किया
यहाँ कोड है। हालांकि यह WPF में समस्याग्रस्त हो सकता है। आपको शीर्ष स्तर जेनेरिक वर्ग पर एक्सएएमएल छोड़ना होगा।
इसका मतलब यह होगा कि आप विशिष्ट बाल वर्गों में एक्सएएमएल कर सकते हैं जो कुछ ऐसा नहीं है जिसे आप करना चाहते हैं (जब तक कि कोड केवल कुछ नहीं है जिसे आप फिर से उपयोग करेंगे लेकिन देखो परिवर्तनीय है)। आप मुझे लगता है कि कोड का उपयोग कर नियंत्रण डिजाइन भी किया जा सकता है, लेकिन मुझे यकीन नहीं है कि यह कितना प्रभावी होगा।
मुझे आईलीस्ट ऑब्जेक्ट की ओर इशारा किया गया था जो एक सार सूची है जिसे कई अन्य लोगों का उत्तराधिकारी है और मैं इसका उपयोग कर रहा हूं। यह एक हैक का थोड़ा सा है लेकिन चूंकि इसका उपयोग ओपन लाइब्रेरी में नहीं किया जाएगा, मैं इसके साथ ठीक हूं। अन्यथा मैं जेनेरिक रूट का उपयोग करूंगा।
कोई कारण नहीं है कि आप इसे linq में नहीं कर सकते हैं? क्या आपके पास .NET के अपने संस्करण पर सीमाएं हैं? – phillip
क्या .NET संस्करण। लिंक और जेनेरिक – Hawxby
ऐसा करने में सक्षम होना चाहिए मुझे समझ में नहीं आता कि linq यहां मेरी मदद कैसे कर सकता है? कृपया इसके जवाब के लिए उत्तर दें। मैं .NET 3.5 का उपयोग कर रहा हूं लेकिन शायद 4.0 –