2011-06-23 21 views
133

में पैरामीटर 'टी' के रूप में इसका उपयोग करने के लिए प्रकार का संदर्भ प्रकार होना चाहिए, मैं जेनेरिक में गहराई से हो रहा हूं और अब ऐसी स्थिति है जिसके लिए मुझे सहायता चाहिए। मुझे विषय शीर्षक में दिखाए गए 'व्युत्पन्न' वर्ग पर संकलन त्रुटि मिलती है। मैं इस तरह के कई अन्य पदों को देखता हूं लेकिन मुझे रिश्ते नहीं दिख रहा है। क्या कोई मुझे बता सकता है कि इसे कैसे हल किया जाए?सामान्य प्रकार या विधि

using System; 
using System.Collections.Generic; 


namespace Example 
{ 
    public class ViewContext 
    { 
     ViewContext() { } 
    } 

    public interface IModel 
    { 
    } 

    public interface IView<T> where T : IModel 
    { 
     ViewContext ViewContext { get; set; } 
    } 

    public class SomeModel : IModel 
    { 
     public SomeModel() { } 
     public int ID { get; set; } 
    } 

    public class Base<T> where T : IModel 
    { 

     public Base(IView<T> view) 
     { 
     } 
    } 

    public class Derived<SomeModel> : Base<SomeModel> where SomeModel : IModel 
    { 

     public Derived(IView<SomeModel> view) 
      : base(view) 
     { 
      SomeModel m = (SomeModel)Activator.CreateInstance(typeof(SomeModel)); 
      Service<SomeModel> s = new Service<SomeModel>(); 
      s.Work(m); 
     } 
    } 

    public class Service<SomeModel> where SomeModel : IModel 
    { 
     public Service() 
     { 
     } 

     public void Work(SomeModel m) 
     { 

     } 
    } 
} 
+0

मुझे कोई संकलन त्रुटियां नहीं मिली –

+0

यह कोड उस त्रुटि को प्रदर्शित नहीं करता है। साफ से संकलित करता है। –

उत्तर

313

मैं repro नहीं कर सकता, लेकिन मैं संदिग्ध अपने वास्तविक कोड में वहाँ की कोई समस्या है कि T : class कहीं है कि - आप की जरूरत संकलक खुश करने के लिए, उदाहरण के लिए (हार्ड एक रेप्रो उदाहरण के बिना निश्चित रूप से कह करने के लिए) का प्रचार करने के कि:

public class Derived<SomeModel> : Base<SomeModel> where SomeModel : class, IModel 
                    ^^^^^ 
                   see this bit 
+6

धन्यवाद, हाँ यह है। एक बार जब मैंने वर्ग की बाधा को जोड़ा तो संकलन त्रुटि दूर हो गई। निम्नलिखित प्रकार के प्रकार की आवश्यकता को पूरा करने के लिए प्रतीत होता है। – ChrisS

+0

यहां क्या काम करता है। सार्वजनिक वर्ग बेस जहां टी: वर्ग, IModel { सार्वजनिक बेस (IVIEW देखें) { } } सार्वजनिक वर्ग व्युत्पन्न : बेस जहां SomeModel: वर्ग, IModel { सार्वजनिक व्युत्पन्न (IVIEW देखें) : आधार (देखें) { कुछ मॉडेल एम = (कुछ मॉडल) एक्टिवेटर। क्रिएट इंस्टेंस (टाइपऑफ (कुछ मॉडेल)); सेवा एस = नई सेवा (); एस। वर्क (एम); } } – ChrisS

+0

भी मदद की :) धन्यवाद :) एक साइड नोट के रूप में, मुझे लगता है कि अगर हमें पहले से ही इंटरफ़ेस, आईएमओ में लागू किया गया है, तो हमें उसी कंक्रीट की प्रतिलिपि नहीं लेनी चाहिए। – Celdor

33

यदि आप होने के T विवश है आपको यह त्रुटि प्राप्त एक class

5

आप एक सामान्य वर्ग या metho पर constrains डाल दिया डी, हर दूसरे सामान्य वर्ग या विधि का उपयोग करने वाली विधि को "कम से कम" उन बाधाओं की आवश्यकता होती है।

संबंधित मुद्दे