0

単純な System.Drawing.Point (int, int) を持つクラスがあります。

public class Foo
{
    public Point Point;
}

このクラスが PointF (float, float) を持つインターフェイスを実装する必要があります。

public interface IPointable { PointF Point { get; } }

もちろん、私がしようとするとFoo : IPointable、私は持っています

Error   7   'Foo' does not implement interface member 'Pointable.Point'

だから、Fooクラスを次のように変更しました

public class Foo
{
    public Point IntPoint;
    public PointF Point { get { return IntPoint; } }
}

ああ、私はコンパイルします。これは、 Point が PointF への暗黙的な変換を行っているためです。

public static implicit operator PointF(Point p);

でも汚い気がする。

FooPointwithint座標があり、これは多くのコードにとって重要です。しかし、時々、あるFoo必要があるだけの場合IPointable、彼の-intらしさはそれほど重要ではありません.

ばかげたプロパティをクラスに追加せずに、インターフェイスFooを使用できる方法はありますか?IPointable

4

2 に答える 2

2

インターフェイスを明示的に実装できます。

internal interface IPointable
{
    PointF Point { get; }
}

internal class STH : IPointable
{
    public Point Point { get; set; }

    PointF IPointable.Point
    {
        get { return Point; }
    }
}

現在、PointFプロパティは、入力されたフォーム変数のみが表示されIPointableます。

于 2012-08-13T09:17:10.257 に答える
2

いいえ、必要に応じてインターフェイス メンバーを実装することはできません。インターフェイスのポイントは、パブリック コントラクトを定義することです。インターフェイスを購読することにより、契約を遵守する必要があります。

Point古いプロパティを変更せずに残しておきたい場合は、インターフェイスを明示的に実装します

PointF IPointable.Point { get { return Point; } }

Fooの参照にキャストして使用しますIPointable

IPointable p = new Foo();
于 2012-08-13T09:18:54.953 に答える