मैंने सोचा कि मैं कुछ का उपयोग करेंगे के साथ Parameterized तरीके से जेनेरिक इंटरफ़ेस (मैं क्या सोचा था) सरल जेनरिक कुछ व्यापार वर्ग पर CRUD लागू करने के लिए। उदाहरण के लिए।सी # इंटरफ़ेस <T> {टी समारोह <T> (टी टी);}: जेनेरिक वापसी प्रकार
public interface IReadable <T>
{
T Read<T>(string ID);
}
और फिर शायद, मैं नोट वर्ग जैसे के साथ सी आर यूडी करने के लिए एक NoteAdapter हो सकता था।
public class NoteAdapter : IReadable<Note>
{
public Note Read<Note>(string ID) {
return new Note();
}
}
लेकिन किसी कारण से, अगर मैं दोनों एक सामान्य वापसी प्रकार और एक समारोह में एक ही सामान्य प्रकार के साथ पैरामिट्रीकृत है ते संकलक भ्रमित हो रही है। यही है, अगर मैं करता हूं:
public interface IReadable <T>
{
void Read<T>(string ID);
}
public class NoteAdapter : IReadable<Note>
{
public void Read<Note>(string ID) {
return new Note();
}
}
यह ठीक संकलित करता है, हालांकि यह ऐसा नहीं करता है जो मैं चाहता हूं! इसके अलावा, इस:
public interface IReadable <T>
{
T Read (string ID);
}
public class NoteAdapter : IReadable<Note>
{
public Note Read(string ID) {
return new Note();
}
}
रूप में अच्छी तरह ठीक काम करता है, हालांकि यह भी आवश्यकताओं संतुष्ट नहीं करता! -- क्यूं कर ? क्योंकि तब मेरे पास एक कक्षा नहीं हो सकती है जो इन इंटरफेस का एक गुच्छा लागू करे ..eg।
public interface IReadable <T>{
T Read (string ID);
}
public class UniversalAdapter : IReadable<Note>, IReadable<Customer> ...
{
public Note Read(string ID) {
return new Note();
}
public Customer Read(string ID) {
return new Customer();
}
}
कोज़ यह संकलित नहीं होगा क्योंकि रिटर्न प्रकार विधियों के हस्ताक्षर का हिस्सा नहीं हैं!
मैं यह धारणा थी, सी # में 3,5 +
T Foo(T t);
T Foo<T> (T t);
T Foo(<SomeType> someInstance);
सभी अलग हस्ताक्षर है! मुझे यहां क्या समझ नहीं आ रहा है ?
आपकी सहायता के लिए Thx .. ऐसा नहीं है कि मैंने सोचा कि क्या काम गलत था, लेकिन मेरी उम्मीद थी कि सीएलआर दो सामान्य प्रकारों को समान करेगा .. एक इंटरफ़ेस और विधि पर एक .. यानी इंटरफ़ेस टी टी के रिटर्न प्रकार के साथ-साथ पढ़ें जैसा ही होगा; लेकिन हकीकत में, यह केवल इंटरफेस के "टी" से मेल खाता है –