這與this question有關。如何編寫我的包裝類以使用部分泛型類型推斷?
我想創建一個通用的包裝類:
public abstract class Wrapper<T>
{
internal protected T Wrapped { get; set; }
}
具有以下擴展名:
public static class WrapperExtensions
{
public static W Wrap<W,T>(this T wrapped) where W:Wrapper<T>,new()
{
return new W {Wrapped = wrapped};
}
public static T Unwrap<T>(this Wrapper<T> w)
{
return w.Wrapped;
}
}
現在假設一個具體的包裝:
public class MyIntWrapper : Wrapper<int>
{
public override string ToString()
{
return "I am wrapping an integer with value " + Wrapped;
}
}
我想撥打這樣的Wrap
擴展名:
MyIntWrapper wrapped = 42.Wrap<MyIntWrapper>();
這是不可能的,因爲在c#中我們需要爲Wrap
擴展提供兩個類型參數。 (這是全有或全無)
顯然部分推斷有可能在F#。
上面的代碼在F#中的外觀如何?
是否有可能在C#中使用它?
你爲什麼不直接定義一個隱式轉換?你可以寫'MyIntWrapper wrapped = 42;' –
爲什麼你有多個包裝類?只需使用一個包裝。另外,如前所述,隱式轉換對於包裝類非常有用。 – Servy