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

时间:2019-03-26 01:31:40

标签: c# derived-class

我正在用一些代码进行测试,有时我无法访问派生类中的方法。我会怎么做?

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()
            {

            }
        }
    }
}

1 个答案:

答案 0 :(得分: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型。