#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. Привет, Абдул, спасибо за твой ответ, Но, похоже, ты не понял мой вопрос, ну, я сказал [пользовательский атрибут], а не свойство