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);

但是我觉得很脏。

Foo有一个坐标Pointint这对我的很多代码都很重要。但有时,当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 回答