Я не могу получить доступ к производному методу класса, который создается в массиве - PullRequest
1 голос
/ 26 марта 2019

Я тестировал некоторый код, и иногда я не могу получить доступ к методу, который находится в производном классе. Что я мог сделать неправильно?

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 Ответ

1 голос
/ 26 марта 2019

Вам нужно привести его к типу 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()
            {

            }
        }
    }
}

Если вы хотите узнать больше о кастинге, проверьте Документы .

Edit: приведение в этом случае работает, потому что test [0] относится к типу B, в противном случае выражение (test [0] as B) вернет null, что вызывает исключение NullReferenceException и означает, что test [0] ] не может быть приведен к типу B.

...