Звучит так, будто вы не используете доступную вам среду в полной мере. Решение проблемы отсутствия интерфейсов маркеров состоит в том, чтобы иметь интерфейс, который не является маркером .
РЕДАКТИРОВАТЬ Мне немного непонятно, что делает атрибут Assignable
, я полагаю, это своего рода преобразование или десериализация?
Как насчет этого: сделать атрибут Assignable
в универсальном интерфейсе IAssignableFrom<T>
.
interface IAssignableFrom<T> {
void AssignFrom(T source);
}
public class Bar : IAssignableFrom<Foo> {
public void AssignFrom(Foo foo){
//implementation of assignment here
}
}
public class Baz : IAssignableFrom<Foo> {
public void AssignFrom(Foo foo){
//implementation of assignment here
}
}
public class Foo : IAssignableFrom<Foo> {
public void AssignFrom(Foo foo){
//implementation of assignment here
}
}
public class Program {
public static void Main(string[] args){
IDictionary<string, IAssignableFrom<Foo>> dictionary = new Dictionary<string, IAssignableFrom<Foo>>;
dictionary.Add("foo", new Foo());
dictionary.Add("bar", new Bar());
dictionary.Add("baz", new Baz());
}
}