หากฉันต้องการตั้งโปรแกรมในรูปแบบ "ฟังก์ชั่น" ฉันจะใช้อะไรแทนอินเตอร์เฟสได้บ้าง?
interface IFace
{
string Name { get; set; }
int Id { get; }
}
class Foo : IFace { ... }
อาจจะTuple<>
?
Tuple<Func<string> /*get_Name*/, Action<String> /*set_Name*/, Func<int> /*get_Id*/> Foo;
เหตุผลเดียวที่ฉันใช้อินเทอร์เฟซตั้งแต่แรกก็เพราะฉันต้องการให้มีคุณสมบัติ / วิธีการบางอย่างอยู่เสมอ
แก้ไข:รายละเอียดเพิ่มเติมบางอย่างเกี่ยวกับสิ่งที่ฉันคิด / พยายาม
บอกว่าฉันมีวิธีที่ใช้สามฟังก์ชั่น:
static class Blarf
{
public static void DoSomething(Func<string> getName, Action<string> setName, Func<int> getId);
}
ด้วยตัวอย่างของBar
ฉันสามารถใช้วิธีนี้:
class Bar
{
public string GetName();
public void SetName(string value);
public int GetId();
}
...
var bar = new Bar();
Blarf.DoSomething(bar.GetName, bar.SetName, bar.GetId);
แต่นั่นเป็นความเจ็บปวดเล็กน้อยที่ฉันต้องพูดถึงbar
สามครั้งในการโทรครั้งเดียว นอกจากนี้ฉันไม่ได้ตั้งใจให้ผู้โทรจัดหาฟังก์ชั่นจากอินสแตนซ์ที่แตกต่างกัน
Blarf.DoSomething(bar1.GetName, bar2.SetName, bar3.GetId); // NO!
ใน C #, interface
เป็นวิธีหนึ่งในการจัดการกับสิ่งนี้; แต่ดูเหมือนว่าเป็นวิธีการเชิงวัตถุมาก ฉันสงสัยว่ามีวิธีแก้ปัญหาการทำงานเพิ่มเติม: 1) ผ่านกลุ่มของฟังก์ชั่นร่วมกันและ 2) ให้แน่ใจว่าฟังก์ชั่นที่เกี่ยวข้องกันอย่างถูกต้อง