Преобразование типов, являющихся наследниками Attribute - C#

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

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

Здравствуйте. Столкнулся с такой проблемой. Читаю Шилдта и встретился мне такой пример:
using System;

[AttributeUsage(AttributeTargets.All)]
public class RemarkAttribute: Attribute
{
    public string Remark { get; private set; }
 
    public RemarkAttribute(string str)
    {
        Remark = str;
    }
}

[RemarkAttribute("Ремарка от атрибута")]
class MyClass
{
}

class Example
{
    static void Main()
    {
        Type objForTypeMyClass = typeof(MyClass);
        Type objForTypeOfAttribute = typeof(RemarkAttribute);
 
        RemarkAttribute re = (RemarkAttribute) Attribute.GetCustomAttribute(objForTypeMyClass, objForTypeOfAttribute); // в этом месте непонятно

    }
}
В классе Example вызывается метод GetCustomAttribute, который возвращает объект типа Attribute. Но при этом данный объект преобразовывается в тип RemarkAttribute, являющийся производным для класса Attribute. Т.е. получается производный_класс = (производный_класс) базовый_класс. Как такое возможно? Поясните, пожалуйста.

Решение задачи: «Преобразование типов, являющихся наследниками Attribute»

textual
Листинг программы
namespace Program
{
    class A
    { }
 
    class B:A
    { }
    
    class Program
    {
        static A Dummy(B obj) {
            return (A)obj;
        }
        
        static void Main() {
            A objA = new A();
            B objB = (B)Dummy(new B());
            Console.WriteLine(objB.GetType());
        }
    }
}

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


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

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

13   голосов , оценка 4.077 из 5