powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Присвоение класса в ветвлении
9 сообщений из 9, страница 1 из 1
Присвоение класса в ветвлении
    #39698916
energy75
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день всем.


Прошу натолкнуть на мысль, как профессионалы реализовывают следующую задачу:

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

Есть процедура, в которой в зависимости от входных условий необходимо в операторе ветвления объявить переменную выбранного в зависимости от условия класса. Далее, за оператором ветвления необходимо работать с этой переменной.

Но дело в том, что переменная объявленная в операторе ветвления не видна за его пределами. Да, понимаю, можно написать множество функций и в ветвлении обращаться к ним. Но поддержка такого кода тот еще геморр.

Очень прошу подсказать решение. Если вводная не понятна, пишите, попробую добавить, разъяснить.

Спасибо.
...
Рейтинг: 0 / 0
Присвоение класса в ветвлении
    #39698923
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для этого наследование придумали. Сделай общий базовый класс, а свои классы унаследуй от него и все твои проблемы исчезнут.
...
Рейтинг: 0 / 0
Присвоение класса в ветвлении
    #39698966
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
energy75Добрый день всем.


Прошу натолкнуть на мысль, как профессионалы реализовывают следующую задачу:

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

Есть процедура, в которой в зависимости от входных условий необходимо в операторе ветвления объявить переменную выбранного в зависимости от условия класса. Далее, за оператором ветвления необходимо работать с этой переменной.

Но дело в том, что переменная объявленная в операторе ветвления не видна за его пределами. Да, понимаю, можно написать множество функций и в ветвлении обращаться к ним. Но поддержка такого кода тот еще геморр.

Очень прошу подсказать решение. Если вводная не понятна, пишите, попробую добавить, разъяснить.

Спасибо.
Язык какой? Шаблон Стратегия.
...
Рейтинг: 0 / 0
Присвоение класса в ветвлении
    #39699033
energy75
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T, Дмитрий Мух, спасибо за участие.


с наследованием немного знаком, но, понятное дело недостаточно. Не сдвинулся я с места, не хватает знаний, как прикрутить.

Ну, допустим, вот наши классы:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
public class Papa
{
    public string param1 { get; set; }
    public Int32 param2 { get; set; }
}


public class Child1 : Papa
{
    public Int32 diablo(Int32 inVar)
    {
        return inVar * 10;
    }
}

public class Child2 : Papa
{
    public Int32 diablo(Int32 inVar)
    {
        return inVar * 2000;
    }
}


И вот нам надо их поюзать:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
public void rr(byte inVar)
{
    switch (inVar)
    {
        case 1:
            {
                Child1 ddd = new Child1();
                break;
            }

        case 2:
            {
                Child2 ddd = new Child2();
                break;
            }
    }


    Console.WriteLine(ddd.diablo(inVar));
}



Понятное дело, в последней строчке ошибка, нифига не сработает. Поправьте меня плиз.
Спасибо.
...
Рейтинг: 0 / 0
Присвоение класса в ветвлении
    #39699077
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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.
27.
28.
29.
30.
31.
32.
33.
public class Papa
{
    public string param1 { get; set; }
    public Int32 param2 { get; set; }

    public Int32 diablo(Int32 inVar)
    {
        return 0;
    }
}
...

public void rr(byte inVar)
{
    Papa ddd;
    switch (inVar)
    {
        case 1:
            {
                ddd = new Child1();
                break;
            }

        case 2:
            {
                ddd = new Child2();
                break;
            }
    }


    Console.WriteLine(ddd.diablo(inVar));
}


И по синтаксису объявления и переопределения методов есть нюансы, зависит от ЯП. По C# можно почитать про наследование и про интерфейсы
...
Рейтинг: 0 / 0
Присвоение класса в ветвлении
    #39699106
energy75
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T, спасибо, вижу что сделал первый шаг.

Признаться, пишу на vb, а сюда постил на шарпе, понимая, что сообщество в основном на нём. К сожалению, сейчас нужно прикрепить принтскрин, поэтому и рождена эта строчка.


Итак. Сдвинулся с места, нашел собственно того, чего не доставало - Overloads , перегрузки. Ваш Return=0 к этому подвинул.
Итак, классы выглядят теперь вот так:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Public Class Papa
    Public Property param1 As String
    Public Property param2 As Int32
    Public Function diablo(inVar As Int32) As Int32
        Return 0
    End Function

End Class


Public Class Child1
    Inherits Papa
    Public Overloads Function diablo(inVar As Int32) As Int32
        Return inVar * 10
    End Function
End Class

Public Class Child2
    Inherits Papa
    Public Overloads Function diablo(inVar As Int32) As Int32
        Return inVar * 2000
    End Function
End Class




Но основная задача не решена. Выбор класса в ветвлении. Ваш пример к сожалению с ошибкой:
...
Рейтинг: 0 / 0
Присвоение класса в ветвлении
    #39699111
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
energy75Но основная задача не решена. Выбор класса в ветвлении. Ваш пример к сожалению с ошибкой:
Ты криво мой пример перевел, внутри select не надо Dim

Я не силен в VB.NET. Почитай
...
Рейтинг: 0 / 0
Присвоение класса в ветвлении
    #39699247
energy75
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

ОГРОМНОЕ СПАСИБО!!!!!!!!

Все получилось.
...
Рейтинг: 0 / 0
Присвоение класса в ветвлении
    #39699253
energy75
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Опубликую работающий код, вдруг кому....


Код: vbnet
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.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
Public Class Papa
    Public Property param1 As String
    Public Property param2 As Int32
    Public Overridable Function Diablo(inVar As Int32) As Int32
        Return 555
    End Function

End Class


Public Class Child1
    Inherits Papa
    Public Overrides Function Diablo(inVar As Int32) As Int32
        Return inVar * 10
    End Function
End Class

Public Class Child2
    Inherits Papa
    Public Overrides Function diablo(inVar As Int32) As Int32
        Return inVar * 2000
    End Function
End Class
'******************************************************************
Module Module1

    Sub Main()
        Console.WriteLine(selection(1))
        Console.WriteLine(selection(2))
        Console.ReadLine()
    End Sub


'******************************************************************
    Public Function selection(inB As Byte) As Int32
        Dim myPapa As New Papa

        Select Case inB
            Case 1
                myPapa = New Child1
            Case 2
                myPapa = New Child2
        End Select

        Return myPapa.Diablo(inB)

    End Function
End Module
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Присвоение класса в ветвлении
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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