【发布时间】:2013-05-02 00:09:55
【问题描述】:
简短版:代码中的 cmets 是否正确?我认为它们是不正确的,应该颠倒过来。
public Type GetTestClass(Object left, Object right)
{
if (left == null || right == null) return null;
Type leftClass = left.GetType();
Type rightClass = right.GetType();
Type testClass;
if (leftClass.IsInstanceOfType(right))
{
testClass = leftClass;
if (!rightClass.IsInstanceOfType(left))
{
// rightClass is a subclass of leftClass
testClass = rightClass;
}
}
else if (rightClass.IsInstanceOfType(left))
{
testClass = rightClass;
if (!leftClass.IsInstanceOfType(right))
{
// leftClass is a subclass of rightClass
testClass = leftClass;
}
}
else
{
// The two classes are not related.
testClass = null;
}
return testClass;
}
我在我正在处理的代码库中遇到了这段代码,我认为 cmets 不正确。我相信 cmets //rightClass is a subclass of leftClass 和 //leftClass is a subclass of rightClass 是不正确的。例如,如果 leftClass 是 Object 类型,rightClass 是 MyClass 类型(继承自 Object),那么这就是我认为代码的工作方式......
-
Object是MyClass的一个实例,是 FALSE -
MyClass是Object的一个实例,是 TRUE -
testClass设置为MyClass - NOT(
Object是MyClass的一个实例是 FALSE)是 TRUE -
testClass设置为Object -
返回
testClass==Object
我相信这是正确的功能......最终代码试图返回两个类的超级类(您也可以说是公共基类),如果它们不相关,则返回 null。使用上面的例子(第 1-5 步),说 leftClass 是 rightClass 的 SUPER 类,或者反过来说 rightClass 是 leftClass 的 SUBCLASS 是否正确?
【问题讨论】:
-
请告诉我你要在上面打一个 [Obsolete("DO NOT USE")]!
-
我添加了我遗漏的代码。代码中发生的事情比我在这里提出的要多……但这不适用于我的问题。到目前为止,我真的很欣赏下面的 cmets 和代码......但我认为我的问题尚未得到解答:我对代码的理解是否正确而 cmets 不正确?
-
@Steve,
leftClass.IsInstanceOfType(right)表示“右边是左边”。rightClass.IsInstanceOfType(left)表示“左为右”。如果右边是左边,但左边不是右边,那么左边一定是超类,右边一定是子类。这相当于第一种情况,您有注释“rightClass 是 leftClass 的子类”。 -
看来,cmets的意图其实是准确的
标签: c# .net inheritance types