如何调用多态对象列表中的函数?

时间:2015-08-19 05:24:54

标签: c# list polymorphism

在C#中,如果我有一个从另一个对象继承的对象,并且我有一个继承对象的列表,我怎么能在基类中调用一个函数?

以下是一个例子:

class testObject
{
    public void testFunction()
    {

    }
}

class testObject2 : testObject
{
    public void testFunction()
    {

    }
}

以下是清单:

List<testObject> testObjects

如果我在列表中添加了一些testObject2个对象,如何为每个testFunction对象调用function testObject2?如果我尝试为每个对象调用testFunction,则会调用testFunction中的testObject

修改

将覆盖代码添加到testFunction中的testObject2时,我收到此错误:

  

无法覆盖继承的成员,因为它未标记为虚拟,   摘要或覆盖

3 个答案:

答案 0 :(得分:1)

class testObject
{
    public virtual void testFunction()
    {

    }
}

class testObject2 : testObject
{
    public override void testFunction()
    {

    }
}

您需要将virtual添加到testObject类中的方法,并将override添加到testObject2中。如果你想为现有逻辑添加一点逻辑,你可以这样做:

    public override void testFunction()
    {
         //it is calling the method in base
         base.testFunction();

        //here you can add more logic if you want.
    }

如果你想要完全独立的方法,你只需要做其他事情

    public override void testFunction()
    {
        //write another logic.
    }

答案 1 :(得分:0)

要启用多态功能,您必须将该功能声明为virtualabstract,然后将override声明为子类

class testObject
{
    public virtual void testFunction()
    {

    }
}

class testObject2 : testObject
{
    public override void testFunction()
    {

    }
}

答案 2 :(得分:0)

班级定义:

class  testObject
    {
        public string s;
        public virtual void testFunction()
        {
            string b = s;
        }
    }

    class testObject2 : testObject
    {
        public string m;
        public override void testFunction()
        {
            string x = m;

        }
    }

函数调用:

  List<testObject> testObjects = new List<testObject>();
  testObjects.Add(new testObject2() { m = "a" });
  testObjects[0].testFunction();
相关问题