Jika saya ingin memprogram dalam gaya "fungsional", dengan apa saya akan mengganti antarmuka?
interface IFace
{
string Name { get; set; }
int Id { get; }
}
class Foo : IFace { ... }
Mungkin a Tuple<>
?
Tuple<Func<string> /*get_Name*/, Action<String> /*set_Name*/, Func<int> /*get_Id*/> Foo;
Satu-satunya alasan saya menggunakan antarmuka di tempat pertama adalah karena saya ingin selalu ingin properti / metode tertentu tersedia.
Sunting: Beberapa detail tentang apa yang saya pikirkan / coba.
Katakanlah, saya punya metode yang membutuhkan tiga fungsi:
static class Blarf
{
public static void DoSomething(Func<string> getName, Action<string> setName, Func<int> getId);
}
Dengan contoh Bar
saya dapat menggunakan metode ini:
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);
Tapi itu agak menyebalkan karena saya harus menyebutkan bar
tiga kali dalam satu panggilan. Plus, saya tidak benar-benar berniat bagi penelepon untuk memasok fungsi dari berbagai kejadian
Blarf.DoSomething(bar1.GetName, bar2.SetName, bar3.GetId); // NO!
Dalam C #, an interface
adalah salah satu cara untuk menghadapinya; tapi itu sepertinya pendekatan yang sangat berorientasi objek. Saya bertanya-tanya apakah ada solusi yang lebih fungsional: 1) melewati kelompok fungsi bersama, dan 2) memastikan fungsi terkait satu sama lain dengan benar.