使用如下代码
public class Task
{
string Name;
public static bool operator ==(Task t1, Task t2)
{ return t1.Name = t2.Name && t1.GetType() == t2.GetType(); }
}
public class TaskA : Task
{
int aThing;
public static bool operator ==(TaskA t1, TaskA t2)
{
return (Task)t1 == (Task)t2 && t1.GetType() == t2.GetType()
&& t1.aThing == t2.aThing; }
}
public class TaskB : Task //more of the same
class Stuffin
{
List<Task> Tasks;
void CheckIt()
{
bool theSame = Tasks[0] == Tasks[1];
}
我试图确保派生运算符 (TaskA.==) 被调用。
尝试该技术时出现编译错误here https://stackoverflow.com/questions/2143394/operator-in-derived-class-never-gets-called.
我认为如果操作符不是静态的,我就能让它正常工作,因为我可以重写基类的操作符。那可能吗?
一旦我明白了,我将如何比较基本属性(我认为转换为任务类型 [(Task)t1 == (Task)t2] 不起作用)?
你不能。运营商不是被覆盖, 他们是超载。这意味着要使用的实现完全在编译时决定。
一件事你cando 是覆盖Equals
in Task
并从调用它==
,然后覆盖它again in TaskA
。这也使得“基本属性”检查变得容易 - 只需调用base.Equals
from TaskA.Equals
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)