Я не говорю о универсальных классах, которые объявляют свойства или поля с типом универсального параметра. Я говорю о универсальных свойствах, которые можно применять как к универсальным, так и к неуниверсальным классам.
Я не об этом:
public class Base<T>
{
public T BaseProperty { get; set; }
}
Я говорю об этом:
public class Base
{
public T BaseProperty<T>
{
get
{
// Insert magic
}
set
{
// Insert magic
}
}
}
Или это:
public class Base<U>
{
public T BaseProperty<T>
{
get
{
// Insert magic
}
set
{
// Insert magic
}
}
public U OtherBaseProperty { get; set; }
}
Использование будет выглядеть примерно так:
var b = new Base();
b.BaseProperty<int> = 42;
int i = b.BaseProperty<int>;
b.BaseProperty<string> = "Hi";
string s = b.BaseProperty<string>;
Или для второго примера:
var b = new Base<string>();
b.BaseProperty<int> = 42;
int i = b.BaseProperty<int>;
b.OtherBaseProperty = "Hi";
string s = b.OtherBaseProperty;
// Вставляемая магия относится к обработке каждого вызова универсального метода получения или установки свойства, который имеет другой тип для параметра типа.
Например, это:
b.BaseProperty<int> = 42;
Нужно обрабатывать иначе:
b.BaseProperty<string> = "Hi";
Я бы предполагал, что для каждого типа T, если метод get вызывается до вызова метода set, возвращается значение по умолчанию (T).
Когда вызывается метод установки, значение сохраняется для каждого типа T, поэтому при последующем вызове метода получения возвращается предыдущее значение, установленное для этого типа.
Обратите внимание, что в свойствах слоев есть только методы.
Как вы думаете, это было бы полезно?