2009-01-21 10 views
13

मुझे कोई समस्या है: कल्पना करें कि मेरे पास प्लगइन-आधारित सिस्टम है।सी # में इंटरफेस के माध्यम से घटनाओं को कैसे कार्यान्वित करें?

मुझे किसी प्रकार का इंटरफ़ेस चाहिए जिसके साथ मैं प्रत्येक प्लगइन से ईवेंट पकड़ सकता हूं, उदाहरण के लिए IReporting इंटरफ़ेस लागू करता है।

(IReporting) object.OnSomeEvent += <.....> 

लेकिन मुझे ऐसा करने का कोई तरीका नहीं मिल रहा है।

उत्तर

31
के बजाय (IReporting)

obj.XXX आप लिखना चाहिए ((IReporting) obj) .XXX

public interface IFoo 
{ 
    event EventHandler Boo; 
} 

class Foo : IFoo 
{ 
    public event EventHandler Boo; 
    public void RaiseBoo() 
    { 
     if (Boo != null) 
      Boo(this, EventArgs.Empty); 
    } 
} 

... 

private void TestClass_Boo(object sender, EventArgs e) 
{ 
    throw new NotImplementedException(); 
} 

    ... 

    object o = new Foo(); 
    ((IFoo)o).Boo += TestClass_Boo; 
    ((Foo)o).RaiseBoo(); 

के बारे में प्लगइन ढांचे अच्छा वास्तुकला के साथ मौजूदा समाधान पर एक नज़र डालें, उदाहरण के लिए MEF

+0

है आपके कॉल में कंक्रीट क्लास फू को कास्ट किए बिना कार्यान्वयन में ऐसा करने का कोई तरीका है ((फू) ओ)। राइजबु(); ? – Shiv

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