1
18
首先,是的,这是一个可怕的想法,打破了各种坚实的设计原则。如果这是公开的,你应该明确地考虑另一种方法,就像简单地使用多态性一样,这似乎可以重构为一个非常清楚的单一调度的情况。
其次,是的,这是可能的。使用
编辑: OP的这一评论清楚地表明,这可能是一种通用的或多态的方法。 @德文布 你可能想考虑一个新的问题,它提供了关于你正在做什么的更多细节,我们可以看看它是否很好地解决了问题。
|
2
14
作为一种替代方法,您是否考虑过根据请求类的对象类型提供不同的类。说下面的话
这将是一种比让每个方法基于调用对象更改其行为更干净的方法。它将清晰地分离出不同IC实现的关注点。此外,它们都可以代理回真正的C实现。 编辑 检查调用堆栈 正如其他一些人指出的那样,您可以检查调用堆栈以确定哪个对象立即调用函数。然而,这并不是一种简单易行的方法来确定您想要特殊情况下的某个对象是否正在调用您。例如,我可以做下面的操作,从某个badObject给你打电话,但是让你很难确定我是这样做的。
|
3
4
从Visual Studio 2012(.NET Framework 4.5)开始,您可以自动通过 caller information
调用方属性位于
这是实现
例子:
|
4
2
您的呼叫代码如下所示:
您的剂量测量方法只需使用IS运算符检查类型:
这看起来更像是一个面向对象的东西。您可以将C类抽象为具有方法的类,并且具有A、B从C继承并简单调用该方法的方式。这将允许您检查基本对象的类型,这显然不是伪造的。 出于好奇,你想用这个构造做什么? |
5
2
由于运行时可能进行内联,因此不可靠。 |
6
0
(几乎)总有一个合适的设计可以满足你的需要。如果你退一步来描述你真正需要做什么,我相信你至少会得到一个好的设计,而不需要你求助于这样的东西。 |
7
0
您可以尝试获取堆栈跟踪并从中确定调用方的类型,在我看来,这是一种过分的做法,而且速度会很慢。
那界面呢
然后你的
|
8
0
您可以检查调用堆栈,但这既昂贵又脆弱。当您的代码是jit时,编译器可能会内联您的方法,因此,虽然它可以在调试模式下工作,但在发布模式下编译时,您可以获得不同的堆栈。 |
9
0
|
10
0
我可能在想我会以不同的方式处理这件事时遇到麻烦,但是。。。。 我假设:
A类呼叫E类获取信息
您知道并创建了这三个类,并且可以向公众隐藏E类的内容。如果不是这样的话,你的控制权就会永远失去。 逻辑上:如果可以隐藏类E的内容,那么很可能通过DLL分发。 如果您仍然这样做,为什么不隐藏类A和C的内容(相同的方法),但允许A和C用作派生类B和D的基呢。 在类A和C中,您将有一个方法来调用类E中的方法并传递结果。在该方法中(可由派生类使用,但内容对用户隐藏),您可以将长字符串作为“键”传递给类E中的方法。任何用户都无法猜测这些字符串,只有基类A、C和E知道这些字符串。
然后再一次。。。我可以忽略这里的复杂性。 |
11
0
你可以使用
但是,上面的方法在性能关键代码中不应该使用。 |
Robert King · Unity C#语法问题-转换位置 1 年前 |
JBryanB · 如何从基本抽象类访问类属性 1 年前 |
law · 检查答案按钮的输入字符串格式不正确 2 年前 |
i_sniff_ket · 在unity之外使用unity类 2 年前 |