作者Cloud (抓不住...)
看板C_Sharp
标题Re: [问题] template语法问题
时间Wed Feb 25 19:45:06 2009
自己回答一下好了~~
根据MSDN,程式码要改为:
public class TreeNode<ItemType> where itemType : IComparable<itemType>
{
// ... omitted
public void comapre(ItemType v )
{
if( m_Value.CompareTo(v) > 0 ) // use CompareTo() method
{
// do something
}
}
}
查了网路,
http://www.artima.com/intv/generics2.html? 里面
有段描述C#和C++ generic的不同,
这是因为C#是run time时候,才会做instantiation,
反观C++是在compile or link
当然就像FantasyRyu大讲的,如果你是用自订型别,
一定要overload operator> ~~
※ 引述《FantasyRyu (眩惑之龙)》之铭言:
: ※ 引述《Cloud (抓不住...)》之铭言:
: : 下述是我学习C#的疑问
: : public class TreeNode<ItemType>
: : {
: : public ItemType m_Value; // member
: : public TreeNode(ItemType val){m_Value = val; } // Ctor
: : public void comapre(ItemType v )
: : {
: : if( m_Value > v ) // 编译错误,这里的值会无法比较,即使
: : // ItemType为int
: : {
: : // some operation
: : }
: : }
: : }
: : 请问该如何实做?? 是否需要ICompariable ??
: IComparable是用来排序的,跟你的写法无关,因为你直接用>符号来比较。
: 你的ItemType是不是Int不重要。
: 重要的是如果你要自定类别,那麽Operator是一定要重写的。
: 不然「int > int」这样编译器看得懂,「科科 > 科科」就看不懂了,
: 因为你没有定义自定类别要怎麽比大小。
: 但是重写 > 的语法我忘了,科科
: public static bool operator > (科科 a, 科科 b)
: {
: return a.value > b.value;
: }
: 我凭印象乱写的,请查书确定一下。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.174.33.12
※ 编辑: Cloud 来自: 218.174.33.12 (02/25 19:45)
※ 编辑: Cloud 来自: 218.174.33.12 (02/25 19:48)