Наследование интерфейсов
От: ruccoder Россия  
Дата: 09.07.07 08:08
Оценка:
У меня с товарищем возникли разногласия по поводу правильности наследования интерфейсов c точки зрения архитектуры. Есть два интерфейса, один является наследником другого.


Родительский:
public interface IFirst
{
    int Weight
    {
        get;
    }
}


Дочерний:

public interface ISecond : IFirst
{
    new double Weight
    {
        get;
    }
}


Дело в том,что в дочернем интерфейсе меняется тип свойства.

Я считаю что это правильное наследование, при условии, что оба интерфейса одновременно не будут явлеться родителями одного и того же класса.

Как Вы считаете?
Best great,
gr. Craftsmanar
icq: 334643333
Re: Наследование интерфейсов
От: pvnic  
Дата: 09.07.07 08:23
Оценка:
Здравствуйте, ruccoder, Вы писали:

и че, это даже скомпилируется?

Не правильно...
т.к. я при получив объект типа ISecond буду чесать репу — а чему же присвоить его значение...
собственно по этому нет и перегрузки возвращаемых значений, тогда как перегрузка передаваемых значений есть.

ну и вообще не очень это красиво, т.к. источник багов.
Re: Наследование интерфейсов
От: MaximVK Россия  
Дата: 09.07.07 08:24
Оценка:
Здравствуйте, ruccoder, Вы писали:

R>У меня с товарищем возникли разногласия по поводу правильности наследования интерфейсов c точки зрения архитектуры. Есть два интерфейса, один является наследником другого.


Я считаю, что это совершенно неправильное наследование. Более того, я считаю все эти игры с new — крайне вредными. Далее, фраза "интерфейс является родителем класса" — исключительно некорректна и вводит в заблуждение. Верной будет — "класс реализует интерфейс".
Re: Наследование интерфейсов
От: GlebZ Россия  
Дата: 09.07.07 08:27
Оценка: 16 (6) +3
Здравствуйте, ruccoder, Вы писали:

public interface IFirst<T>
{
   T Weight {get;}
}
Re: Наследование интерфейсов
От: rsn81 Россия http://rsn81.wordpress.com
Дата: 09.07.07 08:45
Оценка:
Здравствуйте, ruccoder, Вы писали:

Может самое время узнать, что такое Generics?

interface IGeneric<T> {
    T Weight {
        get;
    }
}


IFirst == IGeneric<int>
ISecond == IGeneric<double>
Re: Наследование интерфейсов
От: Sinclair Россия https://github.com/evilguest/
Дата: 11.07.07 04:52
Оценка: +2
Здравствуйте, ruccoder, Вы писали:

R>У меня с товарищем возникли разногласия по поводу правильности наследования интерфейсов c точки зрения архитектуры. Есть два интерфейса, один является наследником другого.



R>Родительский:

R>
R>public interface IFirst
R>{
R>    int Weight
R>    {
R>        get;
R>    }
R>}
R>


R>Дочерний:


R>
R>public interface ISecond : IFirst
R>{
R>    new double Weight
R>    {
R>        get;
R>    }
R>}
R>


R>Дело в том,что в дочернем интерфейсе меняется тип свойства.


R>Я считаю что это правильное наследование,

а я — нет. Зачем здесь вообще наследование? Какой смысл оно имеет?
R>при условии, что оба интерфейса одновременно не будут явлеться родителями одного и того же класса.
Это условие невыполнимо. Наследование как раз и означает, что если ты взялся реализовывать ISecond, то обязан реализовывать IFirst.
R>Как Вы считаете?
Подобное наследование оправдано в редких случаях, когда ISecond играет ту же роль, что и IFirst, а поддержка IFirst нужна в целях обратной совместимости со старым кодом.
См. например IEnumerable<T>: IEnumerable, IList<T> : IList и т.п.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re: Наследование интерфейсов
От: misha_sk Россия  
Дата: 19.07.07 19:33
Оценка:
Здравствуйте, ruccoder, Вы писали:

R>Дело в том,что в дочернем интерфейсе меняется тип свойства.


R>Я считаю что это правильное наследование, при условии, что оба интерфейса одновременно не будут явлеться родителями одного и того же класса.


R>Как Вы считаете?


Это аналогичные интерфейсы, а не родственные => соответственно отношение наследования между ними ни к месту.
Если хочется выразить общность имен, то как уже сказали нужно использовать Generics.
Re: Наследование интерфейсов
От: BulatZiganshin  
Дата: 20.07.07 14:04
Оценка:
Здравствуйте, ruccoder, Вы писали:

R>У меня с товарищем возникли разногласия по поводу правильности наследования интерфейсов c точки зрения архитектуры. Есть два интерфейса, один является наследником другого.


дай этим полям разные имена, типа IWeight и DWeight, и работай с ними. иначе представь себе, что объёкт, реализующий второй (и автоматически первый) интерфейс, передаётся в функцию, работающую с первым — и в результате его вес неожиданно для пользщователя класса уменьшается на полкило. хорошо, если это будет прогррама слежения за весом. а если программа взвещивания золотых слитков? тебя же, как архитектора, на счётчик и поставят
Люди, я люблю вас! Будьте бдительны!!!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.