मैं कक्षा पुस्तकालय के भीतर ऑब्जेक्ट्स को आउटपुट करने के बारे में चिंता किए बिना संदेशों को "आउटपुट" करने की क्षमता प्रदान करना चाहता हूं। क्लास लाइब्रेरी को कंसोल ऐप, विनफॉर्म या डब्ल्यूपीएफ विंडोज़ एप्लिकेशन या वेब पेज में इस्तेमाल किया जा सकता है।क्या उपयोग करें? प्रतिनिधि, घटना, या Func <T>?
मैं मूल रूप से निर्णय लेता था कि मैं इसे संभालने के लिए एक प्रतिनिधि का उपयोग करूंगा। मैंने कक्षाओं का उपयोग करके इसे कार्यान्वित किया लेकिन संकलक को प्रतिनिधि को पसंद नहीं आया जब मैंने प्रतिनिधियों को एक इंटरफेस में डालने का प्रयास किया कि इनमें से प्रत्येक वस्तु निहित है।
मुझे पता चला कि मैं प्रतिनिधि को इंटरफ़ेस से बाहर ले जा सकता हूं और फिर संकलित करने में सक्षम था लेकिन मुझे यकीन नहीं है कि यह पूरा करने के लिए मैं क्या कर रहा हूं .. यह भी एक कड़वाहट जैसा लगता है इसलिए मैं पूछना चाहता था यदि आप में से किसी अलग विचारों यह पूरा करने के लिए है ...
इंटरफ़ेस:
namespace Test
{
using System;
using System.Xml.Linq;
public interface IAction
{
DisplayMessageDelegate DisplayMessage(string message);
void Execute();
XElement Serialize(XName elementName);
}
public delegate void DisplayMessageDelegate(string message);
}
वहाँ से, मुझे यकीन है कि कैसे इस व्यवहार को लागू करने की नहीं कर रहा हूँ: (BTW, मुझे पता है कि इस कोड को नहीं होगा संकलित करें ...)
public class ActionClass1 : IAction
{
// Other methods not shown...
void Execute()
{
if (this.DisplayMessage != null)
{
this.DisplayMessage(“Hello”);
}
}
}
public class ConsoleClass
{
ActionClass1 class1 = new ActionClass1();
class1.DisplayMessage = { x => Console.WriteLine(x); };
}
public class WinFormClass
{
ActionClass1 class1 = new ActionClass1();
Class1.DisplayMessage = {x => DisplayTextBox.Text = x; };
}
यह उल्लेख किया जाना चाहिए कि यदि आपको पैराम्स, रेफ/आउट से कुछ अधिक जटिल की आवश्यकता है ... एक्शन/फनक काम नहीं करेगा। इसके अलावा एक और 'nicety' यह है कि आप पैरामीटर को उचित रूप से नामित कर सकते हैं (इंटेलिजेंस)। ऐसा कहा जा रहा है कि मैं एक्शन का भी उपयोग करूंगा। –
Jake