我需要将矩形类型的变量传递给接口中的函数

时间:2015-04-30 00:20:18

标签: c# interface abstract-class

public class QuadTree<T> where T : IHasRect
 {

    private List<T> m_objects = null;                // The objects in this 
    private Rectangle m_rect;                        // The area this  


    // Getters and Setters
    public List<T> Objects { get { return m_objects; } }
    public Rectangle Rect { get {return m_rect; } }  


    public QuadTree(Rectangle rect)
    {
        m_rect = rect;
    }

    public QuadTree(int x, int y, int width, int height)
    {
        m_rect = new Rectangle(x, y, width, height);
    }



      public void Insert(T item)
    {
        // If this quad doesn't intersect the items rectangle, do nothing
        if (!m_rect.IntersectsWith(item.Rect))
            return;

    }


Main Class
static class MainProgram 
{

    static void Main() { 
    QuadTree<IHasRect> qt = new QuadTree<IHasRect>(3,6,6,6);      
    Rectangle rect = qt.Rect;
    Console.WriteLine(rect);
  //  Console.WriteLine(qt.Rect);
   // QuadTree<IHasRect> qt1 = new QuadTree<IHasRect>(rect);
    Rectangle area = new Rectangle(3, 6, 3, 3);
    IHasRect area1 = new QuadTree<IHasRect>(area);
   qt.Insert(area1);
    Console.WriteLine("Hello");
        List<Item> myList=null;


    Console.WriteLine(myList[0]);
    Console.WriteLine(myList[1]);
    Console.Read();


}}

使用的接口          公共接口IHasRect        {         //定义对象边界的矩形        Rectangle Rect {get; }        }

我需要通过qt.Insert()传递值 我是否需要单独的类来实现S T

1 个答案:

答案 0 :(得分:1)

部分

where T : IHasRect

要求T实现IHasRect接口,这意味着它必须有一个名为Rect的getter,它返回一个Rectangle。

您需要将该方法的实现应用于任何类型T

然后,你会使用像

这样的东西
public class MyClass : IHasRect
{
    public Rectangle Rect { get {return m_rect; } } 
    // You need some way to set m_rect, and you
    // will probably have other properties as well.
}

QuadTree<MyClass> qt = new QuadTree<MyClass>();
qd.Insert(new MyClass());
Rectangle r = qt.First().Rect;
  

那么这个函数怎么样public void Insert(T item){...}如果我没有实现与Quadtree类的接口,如何解析T

QuadTree<T>上的通用约束表明T必须实现IHasRect。您自己的代码示例显示:

public void Insert(T item)
{
    // If this quad doesn't intersect the items rectangle, do nothing
    if (!m_rect.IntersectsWith(item.Rect))
        return;
}

无论T在编译时最终是什么类型,你的代码都知道它将有一个Rect getter。