【发布时间】:2010-10-14 01:58:18
【问题描述】:
不管这是否是个好主意,是否有可能实现一个接口,其中执行函数知道调用对象的类型?
class A
{
private C;
public int doC(int input)
{
return C.DoSomething(input);
}
}
class B
{
private C;
public int doC(int input)
{
return C.DoSomething(input);
}
}
class C
{
public int DoSomething(int input)
{
if(GetType(CallingObject) == A)
{
return input + 1;
}
else if(GetType(CallingObject) == B)
{
return input + 2;
}
else
{
return input + 3;
}
}
}
在我看来这是一种不好的编码习惯(因为参数不会改变,但输出会改变)但除此之外还有可能吗?
我的情况是我希望一些特定类型能够调用某个函数,但我不能排除对该函数的访问。 我想过有一个“类型”参数
DoSomething(int input, Type callingobject)
但不能保证调用对象会使用 GetType(this),而不是 GetType(B) 来欺骗 B,而不管它们自己的类型如何。
这会像检查调用堆栈一样简单(相对简单)吗?
【问题讨论】:
-
您能否提供更多背景信息?因为现在我不明白为什么你不只是在 C 中实现单独的方法。像 C.DoSometingA 和 C.DoSomethingB 这样的东西。甚至更好:但是 A & B 类中的行为。
-
简短的版本是,我最终会得到 30 或 40 个相同的函数,它们只是相差一两行。
-
@devinb:请参阅下面我对帖子所做的编辑。您可能需要考虑提出一个不同的问题。
-
我认为你是对的,但是,我的想法如雨后春笋般涌现的(非常善良和专业的)滥用意味着我预期的重新设计将比我想象的要重要得多.因此,我还不能简洁地提出一个更好的问题。
-
@devinb:好吧,我希望我们不要太苛刻! :) 但是一旦你制定了它,请跟进——我很想听听细节。