我无法访问在数组中实例化的派生类方法

问题描述 投票:1回答:1

我正在测试一些代码,偶尔我无法访问派生类中的方法。我可能做错了什么?

namespace Example
{
    class Program
    {
        static void Main(string[] args)
        {
            A[] test = new A[2];
            test[0] = new B();
            test[0].Example();
            test[0].Example1();
        }
        public class A
        {
            public void Example()
            {

            }
        }
        class B : A
        {
            public void Example1()
            {

            }
        }
    }
}
c# derived-class
1个回答
1
投票

您需要将其转换为B类型,如下所示:

namespace Example
{
    class Program
    {
        static void Main(string[] args)
        {
            A[] test = new A[2];
            test[0] = new B();
            test[0].Example();
            (test[0] as B).Example1();
        }
        public class A
        {
            public void Example()
            {

            }
        }
        class B : A
        {
            public void Example1()
            {

            }
        }
    }
}

如果你想了解更多有关铸造的信息,请查看Docs

编辑:在这种情况下,转换是有效的,因为test [0]是B类型,如果不是这种情况,表达式(test [0]为B)将返回null,这会导致NullReferenceException并且意味着test [0]不能转换为B型。

© www.soinside.com 2019 - 2024. All rights reserved.