powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Чем отличаются инициализации классов A b = new B(); от B b = new B();
11 сообщений из 36, страница 2 из 2
Чем отличаются инициализации классов A b = new B(); от B b = new B();
    #39894568
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вакан
А в каких случаях есть выгода от A b=new B()
Ни в каких.
...
Рейтинг: 0 / 0
Чем отличаются инициализации классов A b = new B(); от B b = new B();
    #39894572
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
class Program
{
    private static void Main(string[] args)
    {
        A a = new B();
        B b = new B();
        a.SayHello();
        b.SayHello();
    }
}

class A
{
    public void SayHello() =>
        Console.WriteLine($"{GetType().Name}.SayHello(): Hello");
}

class B : A
{
    public new void SayHello() =>
        Console.WriteLine($"{GetType().Name}.SayHello(): Take care");
}
...
Рейтинг: 0 / 0
Чем отличаются инициализации классов A b = new B(); от B b = new B();
    #39894574
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вакан и, соответственно, почему невозможен такой синтаксис B b=new(); C c=new();
Теоретически возможен, может когда-то сделают. Компилятор в состоянии научиться использовать по умолчанию тот тип, который указан у переменной, а на var без указания, что там именно создается, ругаться.

Просто это никому не нужно.
...
Рейтинг: 0 / 0
Чем отличаются инициализации классов A b = new B(); от B b = new B();
    #39894579
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy
Ни в каких.
Почему. Выше же, например, упоминали перекрытия методов.
...
Рейтинг: 0 / 0
Чем отличаются инициализации классов A b = new B(); от B b = new B();
    #39894588
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro
Antonariy
Ни в каких.
Почему. Выше же, например, упоминали перекрытия методов.
а, ну да.
однако, учитывая, что перекрытие это в 9 из 10 случаев говнокод, сути это не меняет.

как бы сам кейс, требующий одновременно создания наследника и доступ к перекрытому методу родителя, говорит о том, что что-то не ладно в консерватории.
...
Рейтинг: 0 / 0
Чем отличаются инициализации классов A b = new B(); от B b = new B();
    #39894615
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy
как бы сам кейс, требующий одновременно создания наследника и доступ к перекрытому методу родителя, говорит о том, что что-то не ладно в консерватории.
тут с тобой совершенно согласен, но категоричность всегда режет глаз.

Честно говоря, никак не могу вспомнить кейсов, хотя они точно были (где-то в WPF), что мне было необходимо явно объявлять переменную более общего класса... но это точно было )
...
Рейтинг: 0 / 0
Чем отличаются инициализации классов A b = new B(); от B b = new B();
    #39894814
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть еще один случай, когда без апкастинга никак, только апкастинг делается не к классу, а к интерфейсу - EIMI:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
interface IFoo
{
  void DoSome();
}

interface IBar
{
  void DoSome();
}

class Zot: IFoo, IBar
{
  public void DoSome() => Console.WriteLine("Zot.DoSome");
  void IFoo.DoSome() => Console.WriteLine("IFoo.DoSome");
  void IBar.DoSome() => Console.WriteLine("IBar.DoSome");
}

public static void Main(string[] args)
{
  var z = new Zot();
  z.DoSome();
  IFoo f = new Zot();
  f.DoSome();
  IBar b = new Zot();
  b.DoSome();
}


Код: plaintext
1.
2.
Zot.DoSome
IFoo.DoSome
IBar.DoSome

и подобная картина вовсе не говорит о том, что в консерватории что-то неладно - в исходниках фреймворка EIMI встречается достаточно часто.

А вообще, https://www.google.com/search?q=C# upcasting - вторая ссылка в выдаче, там приведено много чего.
...
Рейтинг: 0 / 0
Чем отличаются инициализации классов A b = new B(); от B b = new B();
    #39894824
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro
Честно говоря, никак не могу вспомнить кейсов, хотя они точно были (где-то в WPF), что мне было необходимо явно объявлять переменную более общего класса... но это точно было )

Вот, достаточно типично:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
IQueryable<Contact> query = dataContext.Set<Contact>();

if(searchField == "Name")
{
    query = query.Where(c => c.Name.StartsWith(searchText));
}
else if(searchField == "Email")
{
    query = query.Where(c => c.Email.StartsWith(searchText));
}

return await query.ToArrayAsync();
...
Рейтинг: 0 / 0
Чем отличаются инициализации классов A b = new B(); от B b = new B();
    #39894825
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры Павловны,

Этот кейс сильно отличается.

fkthat,

А этот вообще не имеет ничего общего. Скорее всего от замены IQueryable на var ничего не изменится.
...
Рейтинг: 0 / 0
Чем отличаются инициализации классов A b = new B(); от B b = new B();
    #39894828
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy
Скорее всего от замены IQueryable на var ничего не изменится.

А ты попробуй заменить. Просто не соберется.
...
Рейтинг: 0 / 0
Чем отличаются инициализации классов A b = new B(); от B b = new B();
    #39894833
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat
Antonariy
Скорее всего от замены IQueryable на var ничего не изменится.

А ты попробуй заменить. Просто не соберется.
верю на слово, этот кусок сам по себе точно не соберется)
...
Рейтинг: 0 / 0
11 сообщений из 36, страница 2 из 2
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Чем отличаются инициализации классов A b = new B(); от B b = new B();
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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