Как определить ограничение на тип класса, если у него есть пользовательский атрибут? - PullRequest
1 голос
/ 08 мая 2011

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

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

[myAttrib]
public MyClass:IMyInterface
{

}

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

спасибо,

1 Ответ

0 голосов
/ 08 мая 2011

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

Взгляните на

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
    {

    }

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

...