Описание тега generic-constraints

Общее ограничение будет ограничивать типы, которые могут использоваться для определенного универсального. Используйте этот тег для вопросов, касающихся общих ограничений.
2 ответа

TypeScript - может ли общее ограничение предоставлять "разрешенные" типы?

Учитывая следующий код... type Indexable<TKey, TValue> = { [index: TKey]: TValue } Это приводит к следующей ошибке: Тип параметра подписи индекса должен быть "строка" или "число". Есть ли способ ограничить TKey быть "строкой" или "числом"?
23 окт '17 в 09:01
2 ответа

Быстрое сопоставление с образцом

В приведенном ниже коде: protocol Serializable { } struct Owner: Serializable { var name: String } struct Car: Serializable { var owners: [Serializable] } let car = Car(owners: [Owner(name: "John"), Owner(name: "Mike")]) Mirror(reflecting: car).chil…
27 июл '16 в 20:43
1 ответ

Общее ограничение, чтобы ограничить коллекцию таким же типом производных объектов

Я хочу ограничить коллекцию, чтобы иметь только один и тот же тип класса, используя общий. public class InvoiceLine<T> where T : TransactionLine ,new() { private readonly IList<TransactionLine> _transactionLines = new List<Transaction…
17 мар '17 в 09:17
3 ответа

C# неограниченный универсальный тип как ограничение

Можно ли иметь общее ограничение, которое является неограниченным универсальным типом? Например: public T DoSomething<T>(T dictionary) where T : IDictionary<,> { ... } Редактировать: просто для объяснения контекста, я хочу ограничить исп…
01 авг '12 в 18:04
2 ответа

Почему универсальный метод интерфейса может быть реализован как неуниверсальный в Java?

Допустим, у нас есть несколько тестовых интерфейсов / классов, подобных этому: abstract class Plant { public abstract String getName(); } interface Eatable { } class Apple extends Plant implements Eatable { @Override public String getName() { return…
10 авг '16 в 02:49
0 ответов

Typescript - Generic Constraints - не принимает объектный литерал соответствующего типа

Используя машинопись 3, в угловых 7 рамок. Я пытаюсь подготовить свои локальные элементы массива Store для firebase, используя свойство Id объекта в качестве его ключа в обертывающем объекте, и наоборот, при извлечении из firestore. Я настроил интер…
20 фев '19 в 11:14
0 ответов

Возможная ошибка? Я могу создать общий экземпляр игнорируя ограничение

Работая над структурой, основанной на узлах, включая сериализацию и десериализацию, я наткнулся на случай, когда я могу создать экземпляр класса, игнорирующий ограничение типа. Почему я могу создать ZNumericProcessor<String> внутри ZSum хотя Z…
19 ноя '15 в 17:38
0 ответов

Наследование с помощью дженериков и перегрузка метода

У меня есть класс со следующим методом: public abstract class TypedMessage<T>{ public TypedMessage<T> setBody(byte[] body) { this.body = body; return this; } В подклассе TypedMessageЯ хочу перегрузить этот метод. Поэтому я делаю следующе…
18 май '17 в 15:28
1 ответ

Общее ограничение типа для интерфейса?

Я могу сделать это: void MyMethod<T>() where T : class { } Есть что-нибудь подобное? void MyMethod<T>() where T : interface { } Я бы предпочел не указывать имя интерфейса явно. Альтернативой является то, что я могу передать аргумент, кот…
20 янв '16 в 15:21
1 ответ

Почему мы не можем удовлетворить статические ограничения членов F# с помощью расширений типов?

Я хотел бы иметь возможность расширять типы из других библиотек статическими методами, чтобы включить общую арифметику. Взять, к примеру, недавно выпущенный SIMD-ориентированный фиксированный размер VectorN типы от Microsoft. Они определяют Zeroони …
17 авг '14 в 04:10
2 ответа

C# - Ограничения и ограничения типов, любой обходной путь для обеспечения безопасности типов?

У меня есть довольно распространенный сценарий об ограничениях Generic Type Constraint, который потребовал бы определения другого Generic. Это уже обсуждалось (сам Эрик Липперт и другие), но до сих пор я не видел общего руководства или, скажем, прак…
2 ответа

Общий метод добавить новый T в список T

Я пытаюсь передать общий список в функцию, которая добавит новый элемент в список. У меня есть следующий урезанный пример: private void SetBayNumb<T>(ObservedList<T> bayList) where T : IBaySpec, new() { var bay = new T(); bayList.Add(bay…
05 фев '15 в 22:00
3 ответа

Можно ли ограничить параметр универсального типа тем, что принимает другой параметр универсального типа?

Например: class ClassA<TA> where TA: T1, T2, T3, T4 ... { } class ClassB<TB> where TB: whatever ClassA.TA accepts { ClassA<TB> MyA; } Я не хочу копировать ограничение ClassA в ClassB из-за принципов SSoT и DRY.
03 апр '14 в 14:22
3 ответа

Как ограничить вложенные универсальные типы универсального метода

Я пытаюсь создать метод, который возвращает данные из базы данных на основе указанного универсального типа. Интерфейс: (это определение компилируется) public interface IOrderPosition<TOrder, TArticle, TOrderPosition> where TOrder : IOrder wher…
4 ответа

Delphi XE: Могу ли я вызывать виртуальные конструкторы с параметрами из обобщенного типа с ограниченным классическим типом, не отказываясь от хаков?

Я пытаюсь построить общий предок для составных элементов управления. Первоначальная идея выглядела примерно так: type TCompositeControl<TControl1: TControl; TControl2: TControl> = class(TWinControl) private FControl1, FControl2: TControl; publ…
7 ответов

Что именно представляет собой "Специальный класс"?

После неудачной попытки получить что-то вроде следующего для компиляции: public class Gen<T> where T : System.Array { } с ошибкой Ограничение не может быть специальным классом System.Array. Я начал задаваться вопросом, что же такое "особый кла…
30 апр '15 в 07:40
1 ответ

Почему Nullable<T> не совпадает как ссылочный тип для общих ограничений

Возможный дубликат: Обнуляемый тип как универсальный параметр возможно? Я столкнулся с очень странной вещью с общими ограничениями типов. У меня есть такой класс: public SomeClass&lt;T&gt; where T:class { } Тем не менее, я обнаружил, что не могу исп…
0 ответов

Почему существует собственный родовой тип?

Я проверяю код, написанный некоторыми бывшими сотрудниками, и нашел это public abstract class BaseClass&lt;T, M&gt; where T : BaseClass&lt;T, M&gt;, M where M : IDisposable { protected M PropertyName {get; private set} ... // T is never used in this…
25 июл '18 в 09:20
1 ответ

Swift - Различия между наследованием протокола и ограничением Self на протокол

У меня есть протокол A: protocol A { } Каковы различия между реализацией протокола B как это: protocol B: A { } по сравнению с реализацией это так: protocol B where Self: A { } ? Что я могу сделать с одним, что я не могу сделать с другим? Где я стол…
1 ответ

Невозможно назначить массив протоколов универсальному массиву

Ниже приведены некоторые коды, некоторые дают ошибку времени компиляции, некоторые нет. Есть ли ошибка или я что-то упускаю из-за дженериков здесь? 1) не работает: class DataSource: NSObject { var dataObjects: [DataType] init&lt;T where T: DataType&…