2015-09-21 16 views
5

के रूप में एक सामान्य इंटरफ़ेस लेता है मैं इन दो इंटरफेसको लागू सामान्य इंटरफ़ेस है कि एक पैरामीटर

/// <summary> 
///  Represents an interface that knows how one type can be transformed into another type. 
/// </summary> 
/// <typeparam name="TInput"></typeparam> 
/// <typeparam name="TOutput"></typeparam> 
public interface ITransformer<in TInput,out TOutput> 
{ 
    TOutput Transform(TInput input); 
} 

public interface ITransform 
{ 
    TOutput Transform<TInput,TOutput>(ITransformer<TInput, TOutput> transformer); 
} 

मैं एक वर्ग है, जिसमें अभाव में इस तरह ITranform को लागू करना है।

public class MessageLogs :ITransform 
{ 
    // But I am am not able to implement the ITransform interface like this 
    // MessageLogs is getting binded in the param but not getting binded to 
    // TInput in the Transform<TIn,TOut> 
    // 
    public T Transform<MessageLogs, T>(ITransformer<MessageLogs, T> transformer) 
    { 
     return transformer.Transform(this); 
    } 

} 

कैसे इसे सही ढंग से Genericness दो इंटरफेस की खोने के बिना करना है? मेरे पास कई ट्रैनफॉर्मर्स हैं।

उत्तर

2

इंटरफ़ेस को कार्यान्वित विधि को टीएनपुट और ट्यूटपूट दोनों में सामान्य होने की आवश्यकता होती है। दूसरे शब्दों में, संदेश लॉग इन टीएनपुट के लिए अन्य प्रकारों को स्वीकार करने में सक्षम होना चाहिए। यह वही नहीं है जो आप चाहते हैं।

public interface ITransformer<in TInput,out TOutput> 
{ 
    TOutput Transform(TInput input); 
} 

public interface ITransform<TInput> 
{ 
    TOutput Transform<TOutput>(ITransformer<TInput, TOutput> transformer); 
} 

public class MessageLogs : ITransform<MessageLogs> 
{ 
    public TOutput Transform<TOutput>(ITransformer<MessageLogs, TOutput> transformer) 
    { 
     return transformer.Transform(this); 
    } 
} 
+0

मेरी इच्छा है कि मैं यह कर सकता हूं। ITRansform लागू नहीं किया गया है – Sameer

+0

धन्यवाद !!! अब काम करता है – Sameer

1

यह

की तरह नीचे

public interface ITransformer<in TInput, out TOutput> 
    { 
     TOutput Transform(TInput input); 
    } 

    public interface ITransform<TInput, TOutput> 
    { 
     TOutput Transform(ITransformer<TInput, TOutput> transformer); 
    } 
    public class MessageLogs<T> : ITransform<MessageLogs<T>,T> 
    { 

     public T Transform(ITransformer<MessageLogs<T>, T> transformer) 
     { 
      return transformer.Transform(this); 
     } 

    } 

अपडेट किया गया कोड Let में विधि के बजाय इंटरफ़ेस जेनरिक में अपने इंटरफेस बदले तुम नहीं कहना: आप की तरह कुछ की जरूरत करने जा रहे हैं संदेश लॉग को यह जानना चाहिए कि इसमें क्या हो रहा है। फिर नीचे करें।

public class Transformer<T1,T2> : ITransform<T1,T2> 
    { 

     public T2 Transform(T1 logger,ITransformer<T1, T2> transformer) 
     { 
      return transformer.Transform(logger); 
     } 

    } 
    public class MessageLogs 
    { 
     // code specific to message logging 
    } 
संबंधित मुद्दे