私には制御できないコードがあります。渡すことができる(KnownTypeに由来していない)カスタムクラスMyClass
を設計するためにC#で、それは可能ですキャスト演算子を使用したC#動的変換
KnownType item = (KnownType) parameter;
:このコードは、オブジェクトパラメータを受け取り、次のようにコンパイル時に知られている型にキャストしようとします私はこのようなカスタム変換演算子を実装するために試みた
protected KnownType ConvertToKnownType()
{
// conversion code goes here
}
:
と上記のコードによってKnownType
に変換する上記のコードのパラメータは、
MyClass
がそのメンバメソッドを使用して
KnownType
に自身を変えることができることを条件とします
public static implicit operator KnownType(MyClass source)
{
KnownType result;
// conversion goes here
return result;
}
しかし、動作しませんでした(使用されませんでした)。キャスト演算子は、コンパイル時にソース・タイプ、ターゲット・タイプおよび変換演算子がわかっている場合にのみ動作すると仮定するのは正しいですか?
編集: 私はそれが無関係であり、主にキャスト演算子が実装されている方法に興味があるので、変換を行うコードの詳細については当初提供しませんでした。つまり、ランタイム適切なコンバータを見つけるためにタイプするか、コンパイル時に決定されますか? MyClass
は、いくつかの他のタイプから派生していDataRowView
のラッパークラスですしながら、物事をクリアするには
、KnownType
は、実際DataRowView
です。 MyClass
はDataRowView
への参照を保持します。 DataView
にバインドする代わりにIList<MyClass>
にバインドしますが、をバインドしているかのようにDataRowView
の列の値にアクセスできるようにするには、まだComboBox
が必要です。残念ながら、キャスト演算子は私が恐れていたように動作します。コンバート時の型情報を考慮に入れるだけです(ただし、同じ継承ツリーの型間でキャストするときは実行時の型情報を使用します)。
'MyType'インスタンスのプロパティに基づいて構築された' KnownType'のインスタンスを返す関数で 'MyType'を作成してみませんか? 'myType.ToKnownType()'を 'KnownType'を期待する関数に渡すことができます。 – xxbbcc
@xxbbcc彼は、彼が変換を行っているクラスを支配していないと言いました。 – Servy
また、渡すオブジェクトをチェックするためにコードが行っていることも正確に依存します。オブジェクトが正確な型であり、継承されていないオブジェクトであることを明示的にチェックしている可能性があります。 – DavidG