いくつかの基本型から派生した辞書に関数のファミリを保持したいと思います(たとえば、基本クラスを「オブジェクト」と呼びましょう)。では、f1 を f2 に保持することは可能ですか?
Func<bool> f1 = () => true;
Func<object> f2 = f1;
エラー 1 型
System.Func<bool>
を暗黙的に変換できませんSystem.Func<object>
これが私たちにできる最善のことですか?
Func<bool> f1 = () => true;
Func<object> f2 = () => (object)f1;
エラー: (なし)
ジェネリックフレンドリーにする必要があるのはwhereステートメントだと思います...しかし、ラムダでそれができるかどうかはわかりません。
Armen の情報をフォローアップして、string と bool の定義を掘り下げました。
public sealed class String : IComparable, ICloneable, IConvertible, IEnumerable,
IComparable<String>, IEnumerabl<char>,
IEquatable<String>
public struct Boolean : IComparable, IConvertible, IComparable<Boolean>,
IEquatable<Boolean>
彼は ref Vs 値について正しいです。String はオブジェクトから暗黙的に派生しますか? @PeterKのリンクによると、構造体の動作のようです。
「ValueType は、値の型のより適切な実装で Object の仮想メソッドをオーバーライドします。ValueType から継承する Enum も参照してください。」
物体:
System.Object: すべてのクラス、構造体、列挙型、およびデリゲート。( http://msdn.microsoft.com/en-us/library/system.objectから)
Func<bool>
そのため、割り当てられないことはFunc<object>
少しばかげています。つまり、継承階層はその観点からは正しかったのです。