Как определить ограничение на тип класса, если у него есть пользовательский атрибут?

#c#-4.0 #custom-attributes #compile-time-constant

#c #-4.0 #пользовательские атрибуты #константа времени компиляции

Вопрос:

есть какой-либо способ заставить класс реализовать интерфейс, если у него есть определенный пользовательский атрибут?

Я хочу получить ошибку во время компиляции, если класс с определенным атрибутом не реализует определенный интерфейс.

 [myAttrib]
public MyClass:IMyInterface
{

}
  

Если MyClass не является typeof(IMyInterface) , я получу ошибку во время компиляции.

Спасибо,

Комментарии:

1. Вы могли бы создать абстрактный класс, управляющий интерфейсом, и получить свой конечный классовый диск из этого абстрактного класса.

Ответ №1:

В случае свойств вы могли бы создать абстрактный класс, наследующий интерфейс, и получить ваш конечный диск класса из этого абстрактного класса.

Взгляните на

 public interface Test
    {
        string Name { get; set; }
    }

    public abstract class Test1 : Test
    {
        public abstract string Name { get; set; }
    }

    public class Test2 : Test1
    {

    }
  

Для пользовательского атрибута вы могли бы сделать

 public class Alias : System.Attribute
    {
    string[] _types;

    public Alias(params string[] types)
    {
        this.Types = types;
    }
    public Alias()
    {
        this.Types = null;
    }

    public string[] Types
    {
        get { return _types; }
        set { _types = value; }
    }
  }

    public interface Test
    {
        Alias Attrib{ get;}
    }

    public abstract class Test1 : Test
    {
        public abstract Alias Attrib { get; }
    }

    public class Test2 : Test1
    {

    }
  

Надеюсь, я отвечу на ваш вопрос.

Комментарии:

1. Привет, Абдул, спасибо за твой ответ, Но, похоже, ты не понял мой вопрос, ну, я сказал [пользовательский атрибут], а не свойство