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
答案 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。