Tôi muốn cung cấp các đối tượng trong thư viện lớp có khả năng “xuất ra” thư mà không phải lo lắng về việc nó đang được xuất ra như thế nào. Thư viện lớp có thể được sử dụng trong một ứng dụng giao diện điều khiển, một ứng dụng Windows WinForm hoặc WPF hoặc một trang web.Điều gì sẽ sử dụng? đại biểu, sự kiện hoặc Func <T>?
Tôi đã quyết định ban đầu là tôi sẽ sử dụng một đại biểu để xử lý việc này. Tôi thực hiện điều này bằng cách sử dụng các lớp học, nhưng trình biên dịch không giống như các đại biểu khi tôi đã cố gắng để đưa các đại biểu vào một giao diện mà mỗi đối tượng này vốn có.
Tôi thấy rằng tôi có thể di chuyển đại biểu ra khỏi giao diện và sau đó đã có thể biên dịch nhưng tôi không chắc rằng điều này hoàn thành những gì tôi đang cố gắng làm .. Nó cũng có vẻ như một kludge vì vậy tôi muốn hỏi nếu bất kỳ của bạn có những ý tưởng khác nhau để thực hiện điều này ...
Giao diện:
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);
}
Từ đó, tôi không chắc chắn làm thế nào để thực hiện hành vi này: (BTW, tôi biết rằng mã này sẽ không biên dịch ...)
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; };
}
Cần lưu ý rằng nếu bạn cần bất kỳ điều gì phức tạp hơn so với thông số, thay đổi/thoát ... Hành động/Func sẽ không hoạt động. Ngoài ra một 'nicety' khác là bạn có thể Đặt tên các tham số một cách thích hợp (intellisense). Điều đó đang được nói tôi cũng sẽ sử dụng Action. –
Jake