.NET TypeSystem является очень мощным. Представьте себе следующий сценарий. Я пишу класс под названием MyTuple
который плохо закодированный клон класса BCL Tuple
:
public class MyTuple<T1, T2> {
public T1 Item1 { get; private set; }
public T2 Item2 { get; private set; }
public MyTuple(T1 item1, T2 item2) {
this.Item1 = item1;
this.Item2 = item2;
}
}
И тогда я понимаю, что я хочу сделать фабричный вид метода для этого типа , так что я могу успешно внедриться в систему вывода типов, а не указать T1
и T2
, когда я не должен выглядеть примерно так:
new MyTuple<int, string>(123, "test"); // which is also a bit redundant
так я пишу метод я говорил в классе, давайте назовем класс Factory
:
public class Factory {
public static MyTuple<T1, T2> Create<T1, T2>(T1 item1, T2 item2) {
return new MyTuple<T1, T2>(item1, item2);
}
}
Таким образом, я счастливее, когда писал:
var tuple = Factory.Create(123, "test"); // and tuple is inferred to be of <int, string>
Теперь, что произойдет, если я переименовал Factory
в MyTuple
:
public class MyTuple {
public static MyTuple<T1, T2> Create<T1, T2>(T1 item1, T2 item2) {
return new MyTuple<T1, T2>(item1, item2);
}
}
Короче: ничего плохого
Это просто случай, когда я сейчас есть 2 совершенно различных типов:
- MyTuple (необщей)
- MyTuple < T1, T2>
Они не имеют ничего общего, они имеют разные типы.
И позвольте ли я сказать, что MyTuple<T1, T2>
просто происходит, чтобы продлить MyTuple
? Ну, MyTuple
не является static
или sealed
, да, обязательно!
public class MyTuple { ... }
public class MyTuple<T1, T2> : MyTuple { ... }
Так что в вашем случае это ничего более, что Mammal
расширение Animal
или ... Tiger
расширения Mammal
. Это не как Mammal of a weirder sort
расширение Mammal of a good ol' classical sort
.
Были ли какие-либо ограничения типа для общего класса? – CodingIntrigue
Описание Microsoft очень ясное! «Экземпляр EntityInstanceContext передается в сборку ссылок (HasIdLink, HasEditLink, HasReadLink) и навигации (HasNavigationPropertyLink, HasNavigationPropertiesLink) и может использоваться разработчиками ссылок для создания ссылок». в чем проблема? –
См. Также IEnnumerable и IEnnumerable ... –
tigerswithguitars