声明结构符合的接口

时间:2013-12-19 23:59:26

标签: c# interface struct

我需要PCL代码中类似PointF的结构。但是System.Drawing不可用。所以我声明了我自己的结构:

public struct PointFF: IPointF {
  public float X { get; set; };
  public float Y { get; set; };
}

现在我想定义一个PointF和PointFF符合的接口IPointF:

interface IPointF {
  float X {get; set; };
  float Y {get; set; };
}

最后,我想以某种方式“使其正式”PointF符合IPointF,所以我可以这样做:

public void DoFunkyStuff (IPointF p) {
  float x = p.X;
  float y = p.Y;
  // do something with x and y
}

这可能吗?

1 个答案:

答案 0 :(得分:3)

不,你不可能做你想做的事。

一般来说,尽管可能结构实现接口,但它被认为是一个非常糟糕的主意。它强制您的结构被装箱,并且往往会破坏您期望从结构中获得的值类型语义。但语言允许它,所以这不是你的主要问题。

你不能做的是以某种方式从预先存在的结构安排实现该接口而不改变它的源代码。由于您无法控制System.Drawing.PointF,因此您无法说服编译器实现IPointF