0

私自身の個人的な啓蒙のために-これを行う方法はありますか?WPFオブジェクトをベクターグラフィックに出力する関数をImageable提供するクラスを実装しています。ToWmf()ただし、これはWPFVisualタイプにのみ意味があるため、イメージング操作のコンポーネントの1つには、タイプがのパラメーターが必要です。Visualこれは、私が意図していることthisです。

C#パラメーター制約のあらゆる種類の例を見つけましたが、継承するクラス型を制約する例はありません。とりあえず静的ImagingUtil.ToWmf()クラスを使用していますが、これは単なる答えではありませんか、それとも別の方法がありますか?

4

2 に答える 2

2

質問は、Imageableオブジェクトが同時に a になることを意味します (そうでなければ、 a を必要とするものVisualにどのように渡すつもりですか?)。thisVisual

これは、2 つの型の一方が他方を継承しない限り不可能であり、Visualは制御下にImageableないため、 の子孫でなければなりませんVisual。その場合はまったく問題ありません。

おそらく、やりたいことは、IImageableインターフェイスを定義してから、次のような拡張メソッドを実装することです。

public static void ToWmf<T>(this T imageable) where T : Visual, IImageable
{
    // ....
}

このようにして、 から派生しVisual、同時に実装するすべての (そして唯一の) ユーザー定義クラスをIImageableで処理できますToWmf

于 2013-01-13T00:20:39.243 に答える
0

ジェネリックに制約を使用できます。詳細については、こちらのMSDN 記事を参照してください。

public interface IImageable<T> where T : Visual
{
    MyReturnType ToWmf();
}

public class MyImageable : IImageable<XXX> // does not work if XXX is not a Visual / inherited from Visual
{
   //implements MyReturnType ToWmf();
}

次に、IImageable をパラメーターとして挿入します。

于 2013-01-13T00:13:07.033 に答える