Tôi đang cố gắng tạo ra một thiết kế cho một số loại giao diện IExecutable. Tôi sẽ không đi vào chi tiết, nhưng vấn đề là tôi có một vài hành động cần được thực hiện từ một lớp cơ sở. Họ có thể có các thông số khác nhau (không có giao dịch lớn) và họ có thể/không thể trả về giá trị.Hành động đóng gói <T> và Func <T>?
Cho đến nay, đây là thiết kế của tôi:
public abstract class ActionBase
{
// ... snip ...
}
public abstract class ActionWithResultBase<T>: ActionBase
{
public abstract T Execute();
}
public abstract class ActionWithoutResultBase: ActionBase
{
public abstract void Execute();
}
Cho đến nay, mỗi người trong số hành động cụ thể của tôi cần phải là một đứa trẻ từ một trong hai ActionWithResultBase hoặc ActionWithoutResult cơ sở, nhưng tôi thực sự không thích điều đó. Nếu tôi có thể di chuyển định nghĩa Execute to ActionBase, xem xét rằng lớp bê tông có thể hoặc không thể trả về một giá trị, tôi sẽ đạt được mục tiêu của mình.
Có người nói với tôi điều này có thể được thực hiện bằng cách sử dụng Func và hành động, mà tôi hoàn toàn đồng ý, nhưng tôi không thể tìm cách để có điều đó vào một lớp duy nhất để người gọi sẽ biết nếu hành động để trả về một giá trị hay không.
Giới thiệu tóm tắt: Tôi muốn làm điều gì đó như:
// Action1.Execute() returns something.
var a = new Action1();
var result = a.Execute();
// Action2.Execute() returns nothing.
var b = new Action2();
b.Execute();
Làm rõ: mục tiêu của tôi là để có một Execute trong ActionBase trừu tượng và tránh tạo ActionWithResultBase và ActionWithoutResultBase. – Alpha