如果我有以下内容:
例如
public abstract class ClassA
{
protected abstract void ValidateTransaction();
}
public abstract class ClassB : ClassA
{
protected override void ValidateTransaction()
{
// some custom logic here
}
}
public class ClassC : ClassB
{
protected override void ValidateTransaction()
{
base.ValidateTransaction();
// some additional custom logic here
}
}
Run Code Online (Sandbox Code Playgroud)
所以我没有在ClassC的ValidateTransaction上找到用法. 我没有看到它在任何地方被调用.
那么我猜这是如何工作的?我的意思是它在这里调用堆栈顶部的方法(调用ClassB的覆盖方法,然后在ClassC的ClassB的方法中包含逻辑?)
这对我来说没有意义,为什么或如何运作或这里的意图.
更新
好的,我确实找到了一个地方,从我们项目中的很多子类调用ClassA的PerformTransaction()方法.
所以ClassA现在看起来像这样,更多细节在这里:
Run Code Online (Sandbox Code Playgroud)public abstract class ClassA { public void PerformTransaction() { ValidateTransaction(); // and calls some other code here. } protected abstract void ValidateTransaction(); }
那么我们还有:
public abstract class ClassB : ClassA
{
protected override void ValidateTransaction()
{
// some custom logic here
}
}
public class ClassC : ClassB
{
protected override void ValidateTransaction()
{
base.ValidateTransaction();
// some additional custom logic here
}
}
public class SomeAbritraryClass : ClassC
{
ClassA.PerformTransaction();
...
}
Run Code Online (Sandbox Code Playgroud)
所以在继承ClassC的一些类中调用ClassA.PerformTransaction().
那么我猜这是如何运作的?我的意思是它在这里调用堆栈顶部的方法(调用 ClassB 的重写方法,然后在我的 ClassC 的 ClassB 方法的重写中包含逻辑?)
是的,基本上就是这样。当您调用ValidateTransaction的实例时ClassC,它的方法就会运行。然后,它显式执行基类 ( ClassB) 方法,然后添加自己的附加验证。
您可能找不到的直接用法,ClassB.ValidateTransaction()因为没有调用此函数的实例ClassB(定义为)。ClassB然而,任何调用都将通过线路ClassC间接使用。ClassB.ValidateTransaction()base.ValidateTransaction()
| 归档时间: |
|
| 查看次数: |
6820 次 |
| 最近记录: |