Модераторы: Partizan, gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Конкретизация типа, при переопределении 
:(
    Опции темы
Exception
Дата 4.12.2005, 23:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 29
Всего: 186



Сорри за тупой вопрос, но компа щас нет узнать ответ.. И не спится)
Допустим, есть класс А со св-вом object X. Можно ли объявить класс B:A, а в нем overrides int X?
То есть "конкретизировать" тип при наследовании? А то чего-то голова соображать не хочет)
PM   Вверх
Дрон
Дата 4.12.2005, 23:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 24
Всего: 93



Run-time error
К сожалению, нет smile

Несколько раз уже с этим сталкивался, так и приходится оставлять object.


--------------------
Да. Именно так.
PM   Вверх
Exception
Дата 5.12.2005, 00:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 29
Всего: 186



А жаль..
Интересно, возможно ли это впринципе? Что сему мешает?
Стоп.. Вроде это
Код

A myb = new B();
A.X = 0.5;//компилер этому не помешает

А нет ли стандартных способов по-другому решить такую проблему? Суть такова: есть Oraganism, у него св-во типа OrganismState. Нужно написать Animal:Organism с AnimalState:OrganismState...
Добавлено @ 00:16
Вопрос по сабжу: если я объявлю B как A, что вернет его GetType? B или A?
Добавлено @ 00:20
Вопрос по сабжу: если я объявлю B как A, что вернет его GetType? B или A?
PM   Вверх
Void
Дата 5.12.2005, 00:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 25
Всего: 173



[OFFTOP]
Попробовал скомпилировать такой код в C#, естественно, получил по мозгам от компилятора. Потом что-то стукнуло меня проверить в C++, и выяснилось, что там ковариантность возвращаемых типов в виртуальных методах работает. Даже не подозревал...
[/OFFTOP]


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
Exception
Дата 5.12.2005, 00:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 29
Всего: 186



Что выдаст этот код?
Код

string s = "hi";
object o = s;
Console.WriteLine(o.GetType().FullName);
Console.ReadLine();

?
PM   Вверх
lovermann
Дата 5.12.2005, 01:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 285
Регистрация: 28.12.2004
Где: Прага

Репутация: 1
Всего: 8



Выдаёт
Код

System.String

PM WWW ICQ   Вверх
Exception
Дата 5.12.2005, 08:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 29
Всего: 186



Слав богу.. Тогда можно динамически узнавать тип и делать нужное приведение
PM   Вверх
mr.DUDA
Дата 5.12.2005, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



О чём это вы?
В C# специально для этого есть модификатор new:

Код

using System;

namespace ConsoleApplication1
{
    class A
    {
        object _x;
        public object X
        {
            get {return _x;}
            set {_x = value;}
        }

        public A(){}
    }

    class B: A
    {
        int _ix;
        public new int X
        {
            get    {return _ix;}
            set {_ix = value;}
        }

        public B(){}
    }

    class Class1
    {
        static void Main()
        {
            B b = new B();
            b.X = 1;
            ((A)b).X = "aaa";
            Console.WriteLine(b.X); // выдаст "1"
            Console.WriteLine(((A)b).X.ToString()); // выдаст "ааа"
        }
    }
}



--------------------
user posted image
PM MAIL WWW   Вверх
Дрон
Дата 5.12.2005, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 24
Всего: 93



Цитата(mr @ 5.12.2005, 11:20)
В C# специально для этого есть модификатор new:

Ну так вопрос ведь не про new, а про override smile


--------------------
Да. Именно так.
PM   Вверх
Exception
Дата 5.12.2005, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 29
Всего: 186



Ой... я ступил... черт, как я мог забыть smile

Цитата
Ну так вопрос ведь не про new, а про override 

Извиняюсь, override просто как пример привел.
Усё, понятно smile
PM   Вверх
Дрон
Дата 5.12.2005, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 24
Всего: 93



Цитата(Run @ 5.12.2005, 12:59)
Извиняюсь, override просто как пример привел.

Хмм... Тогда мы о разных вещах говорим.

У меня проблема был такого плана:
Код
public interface ITest
{
      object Method();
}

public class TestImpl: ITest
{
      public int Method()
      {
                return 5;
      }
}

Нифига ведь не получится smile


--------------------
Да. Именно так.
PM   Вверх
Exception
Дата 5.12.2005, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 29
Всего: 186



Э... вот так можно?
Код

public class MyClass
{
 public object prop(){
get{}
set{}
}
}

public class MyClass2: MyClass
{
      public int prop()
      {
get{}
set{}
      }
}

PM   Вверх
Дрон
Дата 5.12.2005, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 24
Всего: 93



Но тогда виртуальность не работает. Т.е. ты через базовый класс не сможешь вызвать метод пронаследованного.


--------------------
Да. Именно так.
PM   Вверх
mr.DUDA
Дата 5.12.2005, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Цитата
Но тогда виртуальность не работает. Т.е. ты через базовый класс не сможешь вызвать метод пронаследованного.

Если это не нужно, значит можно выкрутиться с пом. new


--------------------
user posted image
PM MAIL WWW   Вверх
Exception
Дата 5.12.2005, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 29
Всего: 186



Цитата
через базовый класс не сможешь вызвать метод пронаследованного.

а мне и не надо smile
PM   Вверх
mr.DUDA
Дата 5.12.2005, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



ну и ладно smile


--------------------
user posted image
PM MAIL WWW   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0982 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.