我有一个简单的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; } }
}
OUHAH,我编译。那是因为Point隐式转换为PointF:
public static implicit operator PointF(Point p);
但我觉得很脏。
Foo
的{{1}}坐标为Point
,这对我的很多代码都很重要。但有时候,当int
只需要Foo
时,他的IPointable
就不那么重要了。
有没有办法不向我的班级添加愚蠢的属性,仍然int
可以使用Foo
界面?
答案 0 :(得分:2)
您可以明确地实现接口:
internal interface IPointable
{
PointF Point { get; }
}
internal class STH : IPointable
{
public Point Point { get; set; }
PointF IPointable.Point
{
get { return Point; }
}
}
现在PointF
属性仅在键入IPointable
的变量中可见。
答案 1 :(得分:2)
不,您不能选择性地实现接口成员。界面的重点是定义公共合同。通过订阅界面,您需要遵守合同。
如果您希望保留旧的Point
媒体资源而不进行更改,implement the interface explicitly:
PointF IPointable.Point { get { return Point; } }
通过将Foo
投射到IPointable
IPointable p = new Foo();