Не понимание полиморфизма и статического поля на примере представленного кода - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте, Объясните мне пожалуйста по следующему коду:
using System;
 
class Base 
{
}
class Derived : Base 
{
}
class Generic<T>
{
    public static int id;
}
class Program
{
    static void Main()
    {
        Generic<Derived>.id = 1;
        Generic<Base>.id = 2;
        Console.WriteLine(Generic<object>.id);
        Console.WriteLine(Generic<Base>.id);
        Console.WriteLine(Generic<Derived>.id);
        Console.ReadKey();
    }
}
Вопрос касается вот этого участка кода:
        
        Generic<Derived>.id = 1;
        Generic<Base>.id = 2;
        Console.WriteLine(Generic<object>.id);
        Console.WriteLine(Generic<Base>.id);
        Console.WriteLine(Generic<Derived>.id);
По какой причине по первой ссылке всё таки в консоль будет выведено 1, а по второй 2, если поле статическое (оно ведь одно на весь класс и должно вывестись в обоих строчках значение 2)? Так же вопрос по следующему коду:
    class Base
    {
        public string M() 
        {
            return "Base";
        }
    }
    class Derived : Base
    {
        public new string M() 
        {
            return "Derived";
        }
    }
 
    class Program
    {
        static void Main(string[] args)
        {
            Base obj = new Derived();
            Console.WriteLine(obj.M());
            Console.ReadKey();
        }
    }
Здесь идёт сокрытие имён в классе Derived. На консоль будет выведено "Base", но я не понимаю почему, да ссылка идёт на базовый класс, но ведь ссылка на объект производного класса и там реализация возвращения строки "Derived"? Я понимаю что ссылка на базовый класс видит только то, что определено в базовом классе, но ведь сигнатура методов одна. Объясните пожалуйста.

Решение задачи: «Не понимание полиморфизма и статического поля на примере представленного кода»

textual
Листинг программы
class Generic_Base { public static int id;}
class Generic_Derived { public static int id;}
class Generic_Object { public static int id;}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4 из 5
Похожие ответы