powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Комбинирование интерфейсов
15 сообщений из 65, страница 3 из 3
Комбинирование интерфейсов
    #38964535
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДиезЕсть общие принципы, общие конструкции, концепции. Общие для разных языков.
Вы правы, есть: наследование, полиморфизм, абстракция, инкапсуляция.

Диез.NET разрабатывали неглупые люди, видимо были на то причины.
Ответы: Да и да.
...
Рейтинг: 0 / 0
Комбинирование интерфейсов
    #38964948
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy@Override - это называется аналогичный? без него же не компилится, да?
В Java все методы виртуальные, аннотация (скоммуниздили с .NET аттрибуты) @Override лишь показывает, что мы действительно хотим переопределить метод родителя и компилятор должен проверить наличие у родителя метода с таким именем и сигнатурой, отличает override от overload.
...
Рейтинг: 0 / 0
Комбинирование интерфейсов
    #38964988
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Раз уж заговорили про ко/конрвариантность, значить созрели.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
   public interface IUser
        { }

        public class User : IUser { }
        public interface IHasCreator1<in T> where T:IUser
        {
            T Creator { set;  }
        }
        public interface IHasCreator2<out T> where T:IUser
        {
            T Creator { get; } 
        }

        public class Foo : IHasCreator1<User>, IHasCreator2<User>
        {
            public User Creator { get; set; }
        }
...
Рейтинг: 0 / 0
Комбинирование интерфейсов
    #38965009
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВРаз уж заговорили про ко/конрвариантность, значить созрели.а смысл разделять их на два интерфейса? 17664287 (там у меня опечатка, естественно, where T : I User)
...
Рейтинг: 0 / 0
Комбинирование интерфейсов
    #38965038
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProЕвгенийВРаз уж заговорили про ко/конрвариантность, значить созрели.а смысл разделять их на два интерфейса? 17664287 (там у меня опечатка, естественно, where T : I User)
Я про "нарушение" принципа "Return Type Covariance" в C#.
...
Рейтинг: 0 / 0
Комбинирование интерфейсов
    #38965925
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДиезRoman Mejtesсамый точный ответ будет: "Потому что" :)
потому что, так решили разрабы в МС и как по мне такое решение вполне логично и верно.
если так сильно прижало, можно наследовать интерфейс в абстрактном классе, а потом через new переопределить этот метод на метод с типом User и радоваться жизни

Спасибо, уже разобрался :)
http://blogs.msdn.com/b/cyrusn/archive/2004/12/08/278661.aspx

Фича действительно мало востребованная, судя по тому, что этот вопрос у меня только сейчас возник.

Посмотрел как ее в Nemerle реализовали без поддержки CLR:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
internal class Foo : IHasCreator
{
	public User Creator()
	{
		return new User();
	}
	IUser IHasCreator.Creator()
	{
		return this.Creator();
	}
}


Элегантно :)Мда, я еще на первой страницу предложил использовать явную реализацию интерфейса.
Оказываются некоторые не знают, что это такое, хотя в любой книжке вроде рассказывается.
...
Рейтинг: 0 / 0
Комбинирование интерфейсов
    #38965937
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProЕвгенийВРаз уж заговорили про ко/конрвариантность, значить созрели.а смысл разделять их на два интерфейса? 17664287 (там у меня опечатка, естественно, where T : I User)все дело в модификаторах:
in (Generic Modifier) (C# Reference)
out (Generic Modifier) (C# Reference)
...
Рейтинг: 0 / 0
Комбинирование интерфейсов
    #38965978
Фотография Диез
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAДиезпропущено...


Спасибо, уже разобрался :)
http://blogs.msdn.com/b/cyrusn/archive/2004/12/08/278661.aspx

Фича действительно мало востребованная, судя по тому, что этот вопрос у меня только сейчас возник.

Посмотрел как ее в Nemerle реализовали без поддержки CLR:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
internal class Foo : IHasCreator
{
	public User Creator()
	{
		return new User();
	}
	IUser IHasCreator.Creator()
	{
		return this.Creator();
	}
}


Элегантно :)Мда, я еще на первой страницу предложил использовать явную реализацию интерфейса.
Оказываются некоторые не знают, что это такое, хотя в любой книжке вроде рассказывается.

Это, видимо, в мой огород камешек? :)
Про явную реализацию интерфейсов я знаю, конечно. Вопрос был в другом - ковариантность return-типов не реализована на уровне CLR ( http://stackoverflow.com/questions/5709034/does-c-sharp-support-return-type-covariance/5709191#5709191 ), но в Nemerle (который тоже поверх CLR) она присутствует.
Мне стало интересно, как они это реализовали. Оказалось, совсем просто; тем же методом, который вы предлагали.
...
Рейтинг: 0 / 0
Комбинирование интерфейсов
    #38965982
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДиезskyANAпропущено...
Мда, я еще на первой страницу предложил использовать явную реализацию интерфейса.
Оказываются некоторые не знают, что это такое, хотя в любой книжке вроде рассказывается.

Это, видимо, в мой огород камешек? :)
Про явную реализацию интерфейсов я знаю, конечно. Вопрос был в другом...Может стоило прямо вопрос задать? Изначально он был таков: 17666424 :)
...
Рейтинг: 0 / 0
Комбинирование интерфейсов
    #38965983
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Комбинирование интерфейсов
    #38965984
Фотография Диез
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВРаз уж заговорили про ко/конрвариантность, значить созрели.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
   public interface IUser
        { }

        public class User : IUser { }
        public interface IHasCreator1<in T> where T:IUser
        {
            T Creator { set;  }
        }
        public interface IHasCreator2<out T> where T:IUser
        {
            T Creator { get; } 
        }

        public class Foo : IHasCreator1<User>, IHasCreator2<User>
        {
            public User Creator { get; set; }
        }



А что показывает этот пример?
Имхо, только то, что проперти - это синтаксический сахар, о чем уже говорили в этом топике.
...
Рейтинг: 0 / 0
Комбинирование интерфейсов
    #38966001
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДиезЕвгенийВРаз уж заговорили про ко/конрвариантность, значить созрели.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
   public interface IUser
        { }

        public class User : IUser { }
        public interface IHasCreator1<in T> where T:IUser
        {
            T Creator { set;  }
        }
        public interface IHasCreator2<out T> where T:IUser
        {
            T Creator { get; } 
        }

        public class Foo : IHasCreator1<User>, IHasCreator2<User>
        {
            public User Creator { get; set; }
        }



А что показывает этот пример?Показывает то, что есть модификаторы in (контрвариантность) и out (ковариантность) :)
Если ищете некий сакральный смысл, то это к автору примера :)
...
Рейтинг: 0 / 0
Комбинирование интерфейсов
    #38966006
Фотография Диез
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA Covariance and Contravariance (C# and Visual Basic)

Ну, вариантность в дженериках и делегатах (aka функциональные типы) - это фича заявлена изначально, и вопросов там нет - работает как и везде :)
А тут вопрос жизни и смерти про ковариантность возвращаемых значений, которая не сильно нужна, как выясняется
...
Рейтинг: 0 / 0
Комбинирование интерфейсов
    #38966020
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Диез...вопрос жизни и смерти...
Диез...не сильно нужна...вопрос исчерпан :)
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Комбинирование интерфейсов
    #40009059
betelgeizex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Бугага!

Прошло пять лет (всего-то), и до проектировщиков C# наконец-то дошло, что return-типы ковариантны по своей сути:

https://daveabrock.com/2020/07/14/c-sharp-9-target-typing-covariants

"It has been a long time, coming—almost two decades of begging and pleading, actually. With C# 9, it looks like return type covariance is finally coming to the language"

Что ты на это скажешь, Илон Маск ?
...
Рейтинг: 0 / 0
15 сообщений из 65, страница 3 из 3
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Комбинирование интерфейсов
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]