Ко- и контра-вариантность
Jan. 25th, 2010 06:16 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
А дайте кто-нибудь примеров, где сабж вызывает проблемы с типами переменных?
А то я идею примерно понимаю, периодически натыкаюсь на проблемы у себя в дотнетах, но не могу составить общую картину в голове, чтобы понять, что именно вызывает проблемы - то ли я с архитектурой фигню сделал, то ли это теоретически неразрешимая проблема и нужно делать обходные костыли.
А то я идею примерно понимаю, периодически натыкаюсь на проблемы у себя в дотнетах, но не могу составить общую картину в голове, чтобы понять, что именно вызывает проблемы - то ли я с архитектурой фигню сделал, то ли это теоретически неразрешимая проблема и нужно делать обходные костыли.
no subject
Date: 2010-01-25 07:23 pm (UTC)Отсуствие - понятно, ну к примеру вот недавняя проблема:
http://community.livejournal.com/ru_scala/9444.html
Присутствие - тут не понимаю как использованети может породить проблемв. Ну контрвариантность неочевидна, но это же если используешь, как и любая фича.
микрософтовский сэмпл:
Date: 2010-01-25 07:27 pm (UTC)using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace SimpleVariance
{
class Animal { }
class Cat: Animal { }
class Program
{
// To understand what the new CoVariance and ContraVariance code does for you
// Try deleting or adding the words out and in from the following 2 lines of code:
delegate T Func1();
delegate void Action1(T a);
static void Main(string[] args)
{
Func1 cat = () => new Cat();
Func1 animal = cat;
Action1 act1 = (ani) => { Console.WriteLine(ani); };
Action1 cat1 = act1;
Console.WriteLine(animal());
cat1(new Cat());
}
}
}