代码之家  ›  专栏  ›  技术社区  ›  7wp

强制调用虚拟基函数而不是重写基函数

c#
  •  0
  • 7wp  · 技术社区  · 15 年前

    在下面的示例中,“test that v1 function was called”失败。是否有方法通过“Class v2”实例强制调用“RunFunction”的基本实现?

        class V1 
        {
            public virtual string RunFunction()
            {
                return "V1";
            }
        }
    
        class V2 : V1
        {
            public override string RunFunction()
            {
                return "V2";
            }
        }
    
    
    
        [Test]
        public void TestCall()
        {
            var v1 = (V1)new V2();
            var v2 = new V2();
    
            Assert.IsTrue(v1.RunFunction() == "V1", "Test that v1 function was called");
            Assert.IsTrue(v2.RunFunction() == "V2", "Test that v2 function was called");
        }
    

    谢谢你们的关注,伙计们。

    3 回复  |  直到 15 年前
        1
  •  4
  •   Justin Ethier    15 年前

    类继承的关键是它允许您重写选定的基类行为。

    你可以使用 base 关键字来自内部 V2 从调用基类代码 V1 但是你不能在课堂之外做。就像一个简单的使用示例:

    class V2 : V1
    {
        public override string RunFunction()
        {
            return base.RunFunction();
        }
    }
    

    或者,您可以实例化 V1 :

    var v1 = new V1();
    
        2
  •  1
  •   Steve Cooper    15 年前

    我想你可能会逃脱 public new string RunFunction() 在子类中,但是我也建议如果v2不应该提供它自己的特定行为,那么使用继承不是正确的方法。

    您还可以尝试在基础上定义静态-- public static string RunFuctionStatic(V1 item) ,然后称为v1.RunFunctionStatic(v2Instance)。

        3
  •  1
  •   Kennet Belenky    15 年前

    你可以通过反思来实现你想要的。

    然而,虽然我不清楚 最终的 目标是,我很清楚你实际上不想做你要求的事情。我建议您花些时间重新学习多态性和面向对象编程。