Все вопросы: [covariance]

45 вопросов

похожие теги: covariantcovariant-return-types
1
голосов
1ответов
727 просмотров

How to override the type of a member in abstract class in child class

I have following code: public abstract class TestProperty { public abstract Object PropertyValue { get; set; } } public class StringProperty: TestProperty { public override string PropertyValue {get;set} } which generate compilation error, I wonder should I have to use generic type in...

2
голосов
2ответов
1273 просмотров

Possible to convert IQueryable<derived> to IQueryable<base>?</derived>

I know about covariance, and I know that in general it will not be possible in C# until v4.0. However I am wondering about a specific case. Is there some way of getting converting IQueryable&lt;Derived&gt; to IQueryable&lt;Base&gt; by somehow creating a wrapper class that does not actually pe...

2
голосов
4ответов
896 просмотров

How to declare a method that returns a generic collection of "anything" (C#)

I am using a hierarchy of generic collection classes that derive from an abstract base class to store entity items that also derive from an abstract base class: abstract class ItemBase { } class MyItem : ItemBase { public MyItem() { } } abstract class CollectionBase&lt;T&gt; : Col...

2
голосов
2ответов
663 просмотров

Problem with Covariant return types from an abstract method

I’m trying to wrap up a two day beat down on Abstract methods and return type Covariance, I’ve already posted two similar questions and I am eternally grateful to the community for the info provided, I just need one last push to get to the finish line. Here is what I am trying to do: 2 abstract c...

31
голосов
6ответов
12268 просмотров

When is C++ covariance the best solution?

This question was asked here a few hours ago and made me realise that I have never actually used covariant return types in my own code. For those not sure what covariance is, it's allowing the return type of (typically) virtual functions to differ provided the types are part of the same inheritan...

15
голосов
4ответов
2224 просмотров

Is there a way to forward declare covariance?

Suppose I have these abstract classes Foo and Bar: class Foo; class Bar; class Foo { public: virtual Bar* bar() = 0; }; class Bar { public: virtual Foo* foo() = 0; }; Suppose further that I have the derived class ConcreteFoo and ConcreteBar. I want to covariantly refine the return type o...

6
голосов
3ответов
1915 просмотров

IList using covariance and contravariance in c#, is this possible?

would this be possible? (I don't have vs. 2010, so I can't try it myself, sorry) public interface IComplexList&lt;out TOutput, in TInput&gt; where TOutput : TInput { public IEnumerator&lt;TOutput&gt; GetEnumerator(); public void Add(TInput item); } public interface IList&lt;T&gt; : ICom...

2
голосов
3ответов
549 просмотров

Co-/contravariance support for non-generic types?

I wonder why the C# team decided not to support co-/contravariance for non-generics, considering they could be just as safe. The question is rather subjective, as I don't expect a team member to respond, but someone may have the insight I (and Barbara Liskov) lack. Lets look at this sample inter...

9
голосов
6ответов
1524 просмотров

Why is List<number> not a sub-type of List<object>?</object></number>

public void wahey(List&lt;Object&gt; list) {} wahey(new LinkedList&lt;Number&gt;()); The call to the method will not type-check. I can't even cast the parameter as follows: wahey((List&lt;Object&gt;) new LinkedList&lt;Number&gt;()); From my research, I have gathered that the reason for not ...

3
голосов
3ответов
1976 просмотров

C# Type Conversion Error Despite Generic Constraint

Why, with a generic constraint on type parameter T of class P of "must inherit from A", does the first call succeed but the second call fail with the type conversion error detailed in the comment: abstract class A { } static class S { public static void DoFirst(A argument) { } public st...

11
голосов
7ответов
20218 просмотров

How can i cast into a ObservableCollection<object></object>

How can i cast from ObservableCollection&lt;TabItem&gt; into ObservableCollection&lt;object&gt; this doesnt work for me (ObservableCollection&lt;object&gt;)myTabItemObservableCollection

7
голосов
2ответов
4923 просмотров

Java covariance

I'm having a hard time trying to figure this out. Say I have the following code: class Animal { } class Mammal extends Animal { } class Giraffe extends Mammal { } ... public static List&lt;? extends Mammal&gt; getMammals() { return ...; } ... public static void main(String[] args) { List&lt...

1
голосов
3ответов
715 просмотров

Solution to the lack of covariance with generics in c# 2.0 (BindingList)

It's a design question. I have a business object, and 5 business object types that are derived from it. I also will have a class which has BindingList as a member. I will have 5 classes derived from it. Since covariance doesn't work here, how would you structure the design to minimize code re...

2
голосов
7ответов
628 просмотров

Inheritance in C# - simple question

Duplicate In C#, why can’t a List object be stored in a List variable Here is my code: public class Base { protected BindingList&lt;SampleBase&gt; m_samples; public Base() { } } public class Derived : Base { public Derived() { m_samp...

22
голосов
4ответов
6810 просмотров

Difference between Covariance and Contra-variance in programming languages

Can anyone explain the concept of covariance and contravariance in programming language theory?

8
голосов
2ответов
1488 просмотров

Ковариантные виртуальные функции и интеллектуальные указатели

В C ++ подкласс может указывать другой тип возвращаемого значения при переопределении виртуальной функции, если тип возвращаемого значения является подклассом исходного типа возвращаемого значения (и оба возвращаются как указатели / ссылки). Можно ли распространить эту функцию на интеллектуал...

41
голосов
5ответов
6557 просмотров

C #: Является ли дисперсия (ковариация / контравариантность) другим словом для обозначения полиморфизма?

Я пытаюсь выяснить точное значение слов Covariance и Contravariance из нескольких статей в Интернете и вопросов по StackOverflow, и, насколько я понимаю, это всего лишь другое слово для полиморфизма . Верно ли я в приведенном выше утверждении? Или я ошибся?

79
голосов
15ответов
50096 просмотров

C #: переопределение возвращаемых типов

Есть ли способ переопределить возвращаемые типы в C #? Если да, то как, а если нет, почему и как это рекомендуется делать? В моем случае у меня есть интерфейс с абстрактным базовым классом и его потомками. Я бы хотел это сделать (ладно, не совсем, но в качестве примера!): public interface ...

9
голосов
2ответов
1721 просмотров

Неуниверсальные версии универсальных классов и интерфейсов

Я часто оказываюсь в ситуации, когда я создаю общий интерфейс или класс, а затем хочу использовать разные версии этого класса или интерфейса нестандартным способом. Например, у меня может быть такой интерфейс: interface ICanCreate&lt;T&gt; { T NewObject(); } Что позволяет классу быть ...

6
голосов
3ответов
545 просмотров

Вариативность типов в .NET Framework 4.0

IEnumerable&lt;T&gt;, IComparable&lt;T&gt; и еще несколько теперь являются типовыми. IList&lt;T&gt;, ICollection&lt;T&gt; и многие другие - нет. Почему?

1
голосов
2ответов
1101 просмотров

Как сделать универсальный класс с наследованием?

Как заставить работать следующий код? Думаю, я не совсем понимаю дженерики C #. Возможно, кто-нибудь подскажет мне верное направление. public abstract class A { } public class B : A { } public class C : A { } public static List&lt;C&gt; GetCList() ...

13
голосов
5ответов
3008 просмотров

Почему C # / CLR не поддерживает совместную / противоположную вариацию метода переопределения?

Существует довольно много вопросов и ответов о том, как обойти ограничение C #, не позволяющее изменять типы возвращаемых методов (и аргументов) на совместимые типы при переопределении, но почему существует это ограничение, либо в компиляторе C #, либо в CLR? Насколько я понимаю, нет ничего, ч...

16
голосов
4ответов
2207 просмотров

Каковы преимущества ковариации и контравариантности?

C # 4.0 будет поддерживать ковариацию и контравариантность. Но я не совсем понимаю преимущества этой новой функции. Вы можете объяснить мне (четко), зачем нам это нужно?

0
голосов
3ответов
290 просмотров

Почему НЕ допускается преобразование между параметрами с разными типами?

Я просто не понимаю, как было бы полезно преобразовать один общий контейнер в другой? Stack &lt;IType&gt; stack = new Stack&lt;SomeType&gt;();

0
голосов
2ответов
189 просмотров

Должен ли я поддерживать совместную / контравариантность для сценариев Pub / Sub в C # 3.0?

В своем приложении я создаю простой концентратор событий, который предлагает кое-что для регистрации подписчиков: Subscribes&lt;EventType&gt;(ISubscriber&lt;EventType&gt; subscriber) // and some other methods for adding subscribers И для публикации событий. Publish&lt;EventType&gt;(Ev...

1
голосов
1ответов
368 просмотров

Дизайн Scala API; сервис, который возвращает Set <i>, где I - некоторый интерфейс (абстрактный / черта)</i>

Я задал немало вопросов о типах коллекций Scala и о том, как их на самом деле можно использовать. Подумайте, как я мог бы написать некоторый сервисный API / реализацию на Java: public interface JavaProductAPI { public Set&lt;IProduct&gt; getProducts(String isin); } А теперь импл: ...

94
голосов
3ответов
7669 просмотров

Почему неизменяемый набор Scala не ковариантен по своему типу?

ИЗМЕНИТЬ : этот вопрос был переписан на основе исходного ответа Класс scala.collection.immutable.Set не является ковариантным по своему параметру типа. Почему это? import scala.collection.immutable._ def foo(s: Set[CharSequence]): Unit = { println(s) } def bar(): Unit = { val s: ...

147
голосов
4ответов
30959 просмотров

Почему пример не компилируется, иначе говоря, как работает (совместная, противоположная и несовместимая) дисперсия?

Следуя этому вопросу , может кто-нибудь объяснить следующее в Scala: class Slot[+T] (var some: T) { // DOES NOT COMPILE // "COVARIANT parameter in CONTRAVARIANT position" } Я понимаю разницу между +T и T в объявлении типа (оно компилируется, если я использую T ). Но тогда...

18
голосов
1ответов
13421 просмотров

Общие подстановочные знаки в объявлениях переменных в Scala

В Java я мог бы сделать это: class MyClass { private List&lt;? extends MyInterface&gt; list; public void setList(List&lt;MyImpl&gt; l) { list = l; } } ... если предположить, что (MyImpl implements MyInterface), конечно. Каков аналог этого в Scala при использовании Buffer? ...

19
голосов
6ответов
6423 просмотров

Ковариантные шаблоны C ++

Мне кажется, об этом уже спрашивали раньше, но я не могу найти его на SO и не могу найти ничего полезного в Google. Возможно, «ковариантный» - не то слово, которое я ищу, но эта концепция очень похожа на ковариантные возвращаемые типы функций, поэтому я думаю, что это, вероятно, правильно. Вот ч...