Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/21: Рейтинг темы: голосов - 21, средняя оценка - 4.62
50 / 4 / 0
Регистрация: 21.02.2018
Сообщений: 153
1

С помощью делегата из одного класса вызвать private метод с другого класса

30.11.2018, 09:57. Показов 4154. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
доброго времени суток. такой вопрос. С применением делегатов и пониманием проблем нет когда происходит простой вызов из Main() функции. Но если у меня в одном проекте есть еще два других класса, и я хочу с помощью делегата из одного класса вызвать privat метод с другого класса вот тут застреваю. может подстажите?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.11.2018, 09:57
Ответы с готовыми решениями:

Как вызвать из одного класса (для метода типа void) метод типа boolean другого класса?
ребят, только учусь и конечно, вопросов возникает много. ситуация вот в чем. есть массив. я должна...

Как вызвать определенный метод переданного класса через метод другого класса?
Добрый день. Захотел я вызвать в методе класса метод некоего другого класса, о котором я пока не...

Передача значения переменной из метода одного класса в метод другого класса
Добрый вечер! Есть основная форма Form1 в которой есть метод private void button1_Click(object...

Доступ к private-данным одного класса из другого
Как получить доступ к private данных одного класса в другом? В принципе нельзя. Но можешь всеже...

8
Эксперт JS
6494 / 3905 / 2005
Регистрация: 14.06.2018
Сообщений: 6,781
30.11.2018, 10:02 2
Приватный метод из другого класса можно вызвать только из неприватного метода того же другого класса.
Так что подумайте над тем, как осуществить хитрую цепочку вызовов.

Если хотите конкретной подсказки, выкладывайте исходный код и полное грамотное описание задачи.
0
50 / 4 / 0
Регистрация: 21.02.2018
Сообщений: 153
30.11.2018, 10:29  [ТС] 3
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
 class Program
    {
        static void Main(string[] args)
        {
            Stopwatch stopwatch = new Stopwatch();
            //int[] arr = { 800, 11, 50, 771, 649, 770, 240, 9 };
            object[] obj = {
                new Planets() { PlanetName = "Jupiter", PlanetSize = 69911 },
                new Planets() { PlanetName = "Uranus", PlanetSize = 25362},
                new Planets() { PlanetName = "Saturn", PlanetSize = 58232}};
 
            
            MyTools.Sort(obj);
            
 
 
            for (int i = 0; i < obj.Length; i++)
            {
                Console.WriteLine(obj[i]);
            }
 
            Console.ReadKey();
        }
    }
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Planets 
    {
        public string PlanetName { get; set; }
        public int PlanetSize { get; set; }
 
        public override string ToString()
        {
            return $"Planet = {PlanetName}, Size = {PlanetSize}";
        }
        public  bool CompareTo(object obj)
        {
            Planets planet = obj as Planets;
            if (this.PlanetSize > planet.PlanetSize)
                return true;
            return false;
        }
    }
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class MyTools
    {
        public static void Sort(object[] array)
        {
            for (int i = 0; i < array.Length; i++)
            {
                for (int j = i + 1; j < array.Length; j++)
                {
                    if (((CompareClass)array[i]).CompareTo(array[j]))
                    {
                        object temp = array[i];
                        array[i] = array[j];
                        array[j] = temp;
                    }
                }
            }
        }
    }
Добавлено через 2 минуты
тут я реализовал с помощью наследства. но сейчас хочу с помощью делегата из MyTools вызывать метод CompareTo
0
Эксперт JS
6494 / 3905 / 2005
Регистрация: 14.06.2018
Сообщений: 6,781
30.11.2018, 11:35 4
Вариант с необобщенным IComparable.
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
using System;
 
namespace Question2361535
{
    class Program
    {
        static void Main(string[] args)
        {
            IComparable[] obj = {
                new Planets() { PlanetName = "Jupiter", PlanetSize = 69911 },
                new Planets() { PlanetName = "Uranus", PlanetSize = 25362},
                new Planets() { PlanetName = "Saturn", PlanetSize = 58232}};
 
            MyTools.Sort(obj);
 
            for (int i = 0; i < obj.Length; i++)
            {
                Console.WriteLine(obj[i]);
            }
 
            Console.ReadKey();
        }
    }
 
    class Planets : IComparable
    {
        public string PlanetName { get; set; }
        public int PlanetSize { get; set; }
 
        public int CompareTo(Planets other)
            => other == null ? 1 : PlanetSize - other.PlanetSize;
 
        public int CompareTo(object obj)
        => CompareTo(obj as Planets);
 
        public override string ToString()
        => $"Planet = {PlanetName}, Size = {PlanetSize}";
    }
 
    class MyTools
    {
        public static void Sort(IComparable[] array)
        {
            for (int i = 0; i < array.Length; i++)
            {
                for (int j = i + 1; j < array.Length; j++)
                {
                    if (array[i].CompareTo(array[j]) > 0)
                    {
                        IComparable temp = array[i];
                        array[i] = array[j];
                        array[j] = temp;
                    }
                }
            }
        }
    }
}
0
50 / 4 / 0
Регистрация: 21.02.2018
Сообщений: 153
30.11.2018, 13:08  [ТС] 5
Цитата Сообщение от amr-now Посмотреть сообщение
Вариант с необобщенным IComparable.
мне как раз нужно без ничего. чисто делегатом.
0
Эксперт JS
6494 / 3905 / 2005
Регистрация: 14.06.2018
Сообщений: 6,781
30.11.2018, 13:48 6
Гиоргий, напишите полный текст задачи.
Смысл проблемы не могу уловить.

Добавлено через 5 минут
Вы хотите в статическом методе Sort() вызвать CompareTo() у экземпляра, когда неизвестно, присутствует ли у экземпляра Planets метод CompareTo() ?

А если у Planets нет метода CompareTo() ? Тогда что делать?
0
50 / 4 / 0
Регистрация: 21.02.2018
Сообщений: 153
30.11.2018, 13:48  [ТС] 7
Цитата Сообщение от amr-now Посмотреть сообщение
Гиоргий, напишите полный текст задачи.
Смысл проблемы не могу уловить.
Добавлено через 5 минут
Вы хотите в статическом методе Sort() вызвать CompareTo() у экземпляра, когда неизвестно, присутствует ли у экземпляра Planets метод CompareTo() ?
А если у Planets нет метода CompareTo() ? Тогда что делать?
задача была такая. Я должен написать класс(в данном задании это MyTools), который произведет сравнение двух каких либо обьектов, которые нам предложит пользователь классном Planets. я это реализовал наследством. в Planets я сделал override метода CompareTo. а сам класс Planets был наследником класса CompareClass(я просто тут уже не пислал). и в MyTools вызывался он тут
C#
1
if (((CompareClass)array[i]).CompareTo(array[j]))
0
Эксперт JS
6494 / 3905 / 2005
Регистрация: 14.06.2018
Сообщений: 6,781
30.11.2018, 13:51 8
Второй вариант - те, кто знает о планетах, отправляют аргументом для сортировки делегат, знающий о планетах.
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
using System;
 
namespace Question2361535
{
    class Program
    {
        static void Main(string[] args)
        {
            object[] obj = {
                new Planets() { PlanetName = "Jupiter", PlanetSize = 69911 },
                new Planets() { PlanetName = "Uranus", PlanetSize = 25362},
                new Planets() { PlanetName = "Saturn", PlanetSize = 58232}};
 
            MyTools.Sort(obj, (a,b) => ((Planets)a).PlanetSize - ((Planets)b).PlanetSize);
 
            for (int i = 0; i < obj.Length; i++)
            {
                Console.WriteLine(obj[i]);
            }
 
            Console.ReadKey();
        }
    }
 
    class Planets 
    {
        public string PlanetName { get; set; }
        public int PlanetSize { get; set; }
 
        public override string ToString()
        => $"Planet = {PlanetName}, Size = {PlanetSize}";
    }
 
    class MyTools
    {
        public static void Sort(IComparable[] array)
        {
            for (int i = 0; i < array.Length; i++)
            {
                for (int j = i + 1; j < array.Length; j++)
                {
                    if (array[i].CompareTo(array[j]) > 0)
                    {
                        IComparable temp = array[i];
                        array[i] = array[j];
                        array[j] = temp;
                    }
                }
            }
        }
 
        public static void Sort(object[] array, Comparison<object> comparison)
        {
            for (int i = 0; i < array.Length; i++)
            {
                for (int j = i + 1; j < array.Length; j++)
                {
                    if (comparison(array[i],array[j]) > 0)
                    {
                        object temp = array[i];
                        array[i] = array[j];
                        array[j] = temp;
                    }
                }
            }
        }
    }
}
0
50 / 4 / 0
Регистрация: 21.02.2018
Сообщений: 153
30.11.2018, 13:53  [ТС] 9
а сейчас не используя наследство, а нужно делегаты, вызвать вместо CоmpareClass CompareTo
0
30.11.2018, 13:53
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.11.2018, 13:53
Помогаю со студенческими работами здесь

Каким образом можно из метода одного класса, вывести в метод другого класса текст всплывающего сообщения
Доброе время суток! Есть метод отрисовки всплывающего сообщения public void SetBalloonTip()...

Вызвать процедуру\функцию из другого объекта\класса. Из одного класса\объекта сделать два
Здравствуйте. Подскажите что не правильно делаю, и возможно ли вообще - вызвать процедуру\функцию...

Как правильно передать метод делегата из одного класса в другой?
Добрый день! Я написал класс который рисует спираль Архимеда в pictureBox. За основу для для...

Вызвать метод из другого класса
Не могу вызвать метод. Ошибка: Ни одна из перегрузок метода &quot;Prisp&quot; не принимает &quot;0&quot; аргументов....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru