powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Комбинирование интерфейсов
25 сообщений из 65, страница 2 из 3
Комбинирование интерфейсов
    #38964136
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AxeleronДиез,
Код: c#
1.
2.
3.
4.
5.
6.
7.
  public class Foo : IHasCreator
    {
        public IUser Creator()
        {
            return new User();
        }
    }


?это не ошибка, это искреннее желание, чтобы работало именно так - public User.
...
Рейтинг: 0 / 0
Комбинирование интерфейсов
    #38964169
Фотография Диез
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy,

В случае со свойством - был приведен конкретный пример 17665356 , когда контракт нарушается.


Для метода такой пример не годится - User подходит при любом использовании (return-типы ковариантнты - нет?).
Тогда зачем ограничивать возврат конкретным типом, если подходит любой наследник?
...
Рейтинг: 0 / 0
Комбинирование интерфейсов
    #38964172
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Диез,

потому что "пропертя" это на самом деле два обычных метода, а значит и суть дела это не меняет :)
Код: c#
1.
2.
set_Creator(User value) {}
User get_Creator() {}
...
Рейтинг: 0 / 0
Комбинирование интерфейсов
    #38964184
Фотография Диез
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman MejtesДиез,

потому что "пропертя" это на самом деле два обычных метода, а значит и суть дела это не меняет :)
Код: c#
1.
2.
set_Creator(User value) {}
User get_Creator() {}



В случае со свойством нарушается как раз контракт set-метода, и это понятно.
get-метод допускает возврат User вместо IUser в любых случаях. Просто метод IUset creator() - тоже.
...
Рейтинг: 0 / 0
Комбинирование интерфейсов
    #38964197
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДиезAntonariy,

В случае со свойством - был приведен конкретный пример 17665356 , когда контракт нарушается.


Для метода такой пример не годится - User подходит при любом использовании (return-типы ковариантнты - нет?).
Тогда зачем ограничивать возврат конкретным типом, если подходит любой наследник?ты реально не догоняешь, что все эти слова мимо кассы?

интерфейс это соглашение на уровне декларации - что вот в этом месте должно быть написано слово IUser, а не User. все обстоятельства за рамками этого факта не имеют ни малейшего значения.

все эти вопросы "зачем" из разряда попыток оспорить уголовный кодекс. не нравятся или не понимаешь правил ООП - пиши на js или асемблере.
...
Рейтинг: 0 / 0
Комбинирование интерфейсов
    #38964232
Фотография Диез
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyДиезAntonariy,

В случае со свойством - был приведен конкретный пример 17665356 , когда контракт нарушается.


Для метода такой пример не годится - User подходит при любом использовании (return-типы ковариантнты - нет?).
Тогда зачем ограничивать возврат конкретным типом, если подходит любой наследник?ты реально не догоняешь, что все эти слова мимо кассы?

интерфейс это соглашение на уровне декларации - что вот в этом месте должно быть написано слово IUser, а не User. все обстоятельства за рамками этого факта не имеют ни малейшего значения.

все эти вопросы "зачем" из разряда попыток оспорить уголовный кодекс. не нравятся или не понимаешь правил ООП - пиши на js или асемблере.

Давайте без перехода на личности, ок? :)

Насчет "понимания принципов ООП" - объясните тогда, плз, почему в Java аналогичный фокус работает?

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
public interface IUser {

}

public class User implements IUser {

}

public interface IHas {

	IUser creator();
}

public class Foo implements IHas {

	@Override
	public User creator() {
		return new User();
	}
}


Компилируется без проблем.
...
Рейтинг: 0 / 0
Комбинирование интерфейсов
    #38964266
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Диез,
Пойми, что интерфейсам абсолютно по барабану, что вот этот его член, являющийся интерфейсом, имплементирован в том или ином классе.
...
Рейтинг: 0 / 0
Комбинирование интерфейсов
    #38964271
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
самый точный ответ будет: "Потому что" :)
потому что, так решили разрабы в МС и как по мне такое решение вполне логично и верно.
если так сильно прижало, можно наследовать интерфейс в абстрактном классе, а потом через new переопределить этот метод на метод с типом User и радоваться жизни
...
Рейтинг: 0 / 0
Комбинирование интерфейсов
    #38964273
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Диез Давайте без перехода на личности, ок? :)пока что я про личность ничего не сказал.
Диез почему в Java аналогичный фокус работает?@Override - это называется аналогичный? без него же не компилится, да?
...
Рейтинг: 0 / 0
Комбинирование интерфейсов
    #38964288
Фотография Диез
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Комбинирование интерфейсов
    #38964297
Фотография Диез
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyДиез Давайте без перехода на личности, ок? :)пока что я про личность ничего не сказал.
Диез почему в Java аналогичный фокус работает?@Override - это называется аналогичный? без него же не компилится, да?

У вас есть привычка - вы считаете по умолчанию, что оппонент хуже вас разбирается в теме, если задает вопросы.
Зря вы так ))
...
Рейтинг: 0 / 0
Комбинирование интерфейсов
    #38964302
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
википедияИспользование интерфейсов возможно двумя способами:

Класс может реализовывать интерфейс. Реализация интерфейса заключается в том, что в описании класса данный интерфейс указывается как реализуемый, а в коде класса обязательно определяются все методы, которые описаны в интерфейсе, в полном соответствии с сигнатурами из описания этого интерфейса . То есть, если класс реализует интерфейс, для любого экземпляра этого класса существуют и могут быть вызваны все описанные в интерфейсе методы. Один класс может реализовать несколько интерфейсов одновременно.

Возможно объявление переменных и параметров методов как имеющих тип-интерфейс. В такую переменную или параметр может быть записан экземпляр любого класса, реализующего интерфейс. Если интерфейс объявлен как тип возвращаемого значения функции, это означает, что функция возвращает объект класса, реализующего данный интерфейс.а разработчики java просто решили дать разработчику выстрелить себе в ногу с помощью @Override. фича-то оказалась востребованной.
...
Рейтинг: 0 / 0
Комбинирование интерфейсов
    #38964324
Фотография Диез
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy...
Диез почему в Java аналогичный фокус работает?@Override - это называется аналогичный? без него же не компилится, да?

Прекрасно компилируется!

Код: java
1.
2.
3.
4.
5.
6.
7.
public class Foo implements IHasCreator {

	public User creator() {
		return new User();
	}
}
}
...
Рейтинг: 0 / 0
Комбинирование интерфейсов
    #38964325
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДиезAntonariyпропущено...
пока что я про личность ничего не сказал.
пропущено...
@Override - это называется аналогичный? без него же не компилится, да?

У вас есть привычка - вы считаете по умолчанию, что оппонент хуже вас разбирается в теме, если задает вопросы.
Зря вы так ))это умолчание? 17666424
или может быть это? 17666660

нет, оппонент не молчал, он активно демонстрировал свой невысокий уровень владения темой.
...
Рейтинг: 0 / 0
Комбинирование интерфейсов
    #38964333
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДиезAntonariy...
пропущено...
@Override - это называется аналогичный? без него же не компилится, да?

Прекрасно компилируется!

Код: java
1.
2.
3.
4.
5.
6.
7.
public class Foo implements IHasCreator {

	public User creator() {
		return new User();
	}
}
}

ну значит я ошибся насчет назначения этого overrides, а java является еще большим убожеством, чем мне казалось ранее, раз позволяет такие вольности.
...
Рейтинг: 0 / 0
Комбинирование интерфейсов
    #38964349
Фотография Диез
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy...ну значит я ошибся ...

Уже прогресс Удачи!
...
Рейтинг: 0 / 0
Комбинирование интерфейсов
    #38964355
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДиезУже прогресс Удачи!
И что ты этим кому доказал? Тебе Antonariy все на пальцах расписал и не поленился. А ты не только Java не знаешь, но и элементарных основ C#. Но сегодня, надеюсь, ты усвоил урок 5: "Интерфейсы". Уже прогресс. Удачи!
...
Рейтинг: 0 / 0
Комбинирование интерфейсов
    #38964372
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДиезAntonariy...ну значит я ошибся ...

Уже прогресс Удачи!пфф, какую ерунду мои оппоненты считают прогрессом. наверное по себе судят?

я всегда признаю свои промахи.
...
Рейтинг: 0 / 0
Комбинирование интерфейсов
    #38964476
Фотография Диез
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AxeleronДиезУже прогресс Удачи!
И что ты этим кому доказал? Тебе Antonariy все на пальцах расписал и не поленился. А ты не только Java не знаешь, но и элементарных основ C#. Но сегодня, надеюсь, ты усвоил урок 5: "Интерфейсы". Уже прогресс. Удачи!

Переформулирую свой первоначальный вопрос более абстрактно: почему в C# нарушается принцип Return Type Covariance, который соблюдается в других языках с ООП, с которыми я знаком(по крайней мере, в Java, Scala, Nemerle)?

Вижу, что вы этим вопросом не интересовались. Ну что ж, это не дает мне повод считать, что вы не разбираетесь в основах ООП. У каждого свои интересы.
...
Рейтинг: 0 / 0
Комбинирование интерфейсов
    #38964490
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Диез,
Почему Вы уверены, что все языки программирования должны быть одинаковыми и иметь одинаковые инструменты, возможности и функционал?
...
Рейтинг: 0 / 0
Комбинирование интерфейсов
    #38964512
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДиезAxeleronпропущено...

И что ты этим кому доказал? Тебе Antonariy все на пальцах расписал и не поленился. А ты не только Java не знаешь, но и элементарных основ C#. Но сегодня, надеюсь, ты усвоил урок 5: "Интерфейсы". Уже прогресс. Удачи!

Переформулирую свой первоначальный вопрос более абстрактно: почему в C# нарушается принцип Return Type Covariance, который соблюдается в других языках с ООП, с которыми я знаком(по крайней мере, в Java, Scala, Nemerle)?

Вижу, что вы этим вопросом не интересовались.
Что характерно, ответ был дан еще до того, как был задан вопрос: 17665335
Antonariyпричина в том, что это данность. Интерфейсы работают так и никак иначе. http://stackoverflow.com/questions/5709034/does-c-sharp-support-return-type-covariance This kind of covariance is not supported in C#, and is unlikely to ever be supported. It is not supported by the CLR. чем я в действительности не интересовался, так этой ковариантностью.

и ошибся в том, что это способ выстрелить себе в ногу.
This is safe because consumers of Contents via Enclosure expect an Animal, and Aquarium promises to not only fulfill that requirement, but moreover, to make a more strict promise: that the animal is always a fish.
...
Рейтинг: 0 / 0
Комбинирование интерфейсов
    #38964519
Фотография Диез
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AxeleronДиез,
Почему Вы уверены, что все языки программирования должны быть одинаковыми и иметь одинаковые инструменты, возможности и функционал?

А я ничего подобного не утверждал.
Вопрос "почему?" для меня имеет смысл "по какой причине?". Для вас, видимо, смысл другой - "какого хрена?"

Извечная проблема неоднозначности естественных языков.
...
Рейтинг: 0 / 0
Комбинирование интерфейсов
    #38964521
Фотография Диез
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyДиезпропущено...


Переформулирую свой первоначальный вопрос более абстрактно: почему в C# нарушается принцип Return Type Covariance, который соблюдается в других языках с ООП, с которыми я знаком(по крайней мере, в Java, Scala, Nemerle)?

Вижу, что вы этим вопросом не интересовались.
Что характерно, ответ был дан еще до того, как был задан вопрос: 17665335
Antonariyпричина в том, что это данность. Интерфейсы работают так и никак иначе. http://stackoverflow.com/questions/5709034/does-c-sharp-support-return-type-covariance This kind of covariance is not supported in C#, and is unlikely to ever be supported. It is not supported by the CLR. чем я в действительности не интересовался, так этой ковариантностью.

и ошибся в том, что это способ выстрелить себе в ногу.
This is safe because consumers of Contents via Enclosure expect an Animal, and Aquarium promises to not only fulfill that requirement, but moreover, to make a more strict promise: that the animal is always a fish.

Простите, мне, сложно всерьез воспринимать информацию, которая начинается со слов "ты тупой?".
...
Рейтинг: 0 / 0
Комбинирование интерфейсов
    #38964522
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Диез,
Нет, я именно спросил то что хотел - почему вы считаете (уверены), что все языки программирования должны быть одинаковыми? Мне стало интересно.
...
Рейтинг: 0 / 0
Комбинирование интерфейсов
    #38964531
Фотография Диез
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AxeleronДиез,
Нет, я именно спросил то что хотел - почему вы считаете (уверены), что все языки программирования должны быть одинаковыми? Мне стало интересно.

Видимо, вам и ответить придется самому, потому что я так не считаю.

Есть общие принципы, общие конструкции, концепции. Общие для разных языков. И если в каком-то из ЯП поведение отличает от остальных, возникает вопрос - каковы объективные причины такого поведения. .NET разрабатывали неглупые люди, видимо были на то причины.
...
Рейтинг: 0 / 0
25 сообщений из 65, страница 2 из 3
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Комбинирование интерфейсов
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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