Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
0 / 0 / 0
Регистрация: 23.10.2018
Сообщений: 123

CS0029 при присвоении переменной адреса метода

23.10.2018, 10:12. Показов 2184. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!
Делегат вызывается в неймспейс.
Переменная создается в классе 2.
Переменной присваевается адресс метода из класса 1.
Тут и выдает
Error CS0029 Cannot implicitly convert type 'laba4.Vektor' to 'laba4.Operation' ConsoleApp1
Создание и присвоение в классе 2.
C#
1
2
3
Operation oper;
  oper = A.Add(B);
  oper = A.Razn(B);
Функции в классе 1 :
C#
1
2
3
4
5
 public Vektor Add(Vektor V)
        { return new Vektor(this.x + V.x, this.y + V.y, this.z + V.z); }
        //raznost
        public Vektor Razn(Vektor V)
        { return new Vektor(this.x - V.x, this.y - V.y, this.z - V.z); }
буду рад любой помощи...
Спасибо!
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.10.2018, 10:12
Ответы с готовыми решениями:

Ошибка при присвоении переменной класса
Доброго времени суток, уважаемые программисты. Такая ситуация: имеется два класса using System; using...

При сложении двух чисел получается сумма которая почемуто изменяется при присвоении переменной
В режиме дебага в VS смотрю на код, который складывает два числа, получается корректный результат, но при присвоении переменной получается...

Присвоение переменной одного метода значения из другого метода
Есть метод А(), в которой в переменную int a присваивается 34; И есть метод В(), в которой в переменную int b присваивается А().а :) ...

13
 Аватар для ashsvis
923 / 503 / 202
Регистрация: 08.10.2018
Сообщений: 1,553
Записей в блоге: 11
23.10.2018, 11:01
Amigot, пожалуйста, описание (декларацию делегата) Operation в студию!
0
0 / 0 / 0
Регистрация: 23.10.2018
Сообщений: 123
23.10.2018, 11:03  [ТС]
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace laba4
{
    delegate double Operation(Vektor V);
    
    public class Vektor
    {
       
        public readonly double x, y, z;
        public Vektor(double x, double y, double z)
 
        {
            this.x = x;
            this.y = y;
            this.z = z;
        }
 
        //summa
        public Vektor Add(Vektor V)
        { return new Vektor(this.x + V.x, this.y + V.y, this.z + V.z); }
        //raznost
        public Vektor Razn(Vektor V)
        { return new Vektor(this.x - V.x, this.y - V.y, this.z - V.z); }
        //длина
        public virtual double Length()
        { return Math.Sqrt(x * x + y * y + z * z); }
        public virtual double Length(Vektor V)
        {
            return (Math.Sqrt(x * x + y * y + z * z) * Math.Sqrt(x * x + y * y + z * z));
        }
 
        //skalarnoe proizvedenie
        public virtual double Skalar(Vektor V)
        { return x * this.x + y * this.y + z * this.z; }
        //umnozenie na skalar a
        public double Uskalar()
        {
            double a = 1;
            return a * this.x + a * this.y + a * this.z;
        }
        //sravnenie
        public bool Equals(Vektor V)
        {
            if (!(V is Vektor))
            { return false; }
            return base.Equals(V);
        }
        public override string ToString()
        {
            return $"{x} {y} {z}";
        }
       
 
        
    }
    //naslednik+pereopredelenie
    public class Naslednik : Vektor
    {
        public Naslednik(double x, double y, double z) : base(x, y, z)
        { }
 
        public override double Length()
        {
            return (Math.Sqrt(2 * x * x + 2 * y * y + 2 * z * z));
        }
    }
   
    public class Demo
    {
        
 
        public static void Main()
        {
            Vektor A = new Vektor(10, 7, 9);
            Vektor B = new Vektor(3, 5, 7);
            Console.WriteLine("A vektor: x={0},y={1},z={2}", A.x, A.y, A.z);
            Console.WriteLine("B vektor: x={0},y={1},z={2}", B.x, B.y, B.z);
            Console.WriteLine($"Summa : {A.Add(B)}");
            Console.WriteLine($"Raznost: {A.Razn(B)}");
            Console.WriteLine($"The scalar *****: {A.Skalar(B)}");
            Console.WriteLine("Dlina A  :   {0}    ", A.Length());
            Console.WriteLine("Dlina B  :   {0}  ", B.Length());
            Console.WriteLine($"Umnozenie na skalar-Vektor A: {A.Uskalar()}");
            Console.WriteLine($"Umnozenie na skalar-Vektor B: {B.Uskalar()}");
            Console.WriteLine($"Vektor v kvadrate-Vektor A: {A.Length(B)}");
            Console.WriteLine($"Ravni li: {A.Equals(B)}");
            Naslednik test = new Naslednik(3, 5, 7);
            Console.WriteLine($"Skalar umnozenij na 2 do izvlecenija kornja(nasledovanie+pereopredelenie): {test.Length()}");
            Console.WriteLine($"DEISTVIJA CEREZ DELEGATOV ");
            Operation oper;
            oper = A.Add(B);
            oper = A.Razn(B);
            Console.WriteLine("Press Enter...");
            Console.ReadLine(); // Чтобы программа сразу не закрылась
        }
    }
 
}
0
Эксперт JS
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
23.10.2018, 11:58
Лучший ответ Сообщение было отмечено Amigot как решение

Решение

Подправил делегат, и было жутко кривое сравнение.
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
using System;
 
namespace laba4
{
    delegate Vektor Operation(Vektor V);
 
    public class Vektor : IEquatable<Vektor>
    {
        public readonly double x, y, z;
 
        public Vektor(double x, double y, double z)
        {
            this.x = x;
            this.y = y;
            this.z = z;
        }
 
        //summa
        public Vektor Add(Vektor V)
        { return new Vektor(x + V.x, y + V.y, z + V.z); }
        //raznost
        public Vektor Razn(Vektor V)
        { return new Vektor(x - V.x, y - V.y, z - V.z); }
        //длина
        public virtual double Length()
        { return Math.Sqrt(x * x + y * y + z * z); }
        public virtual double Length(Vektor V)
        {
            return (Math.Sqrt(x * x + y * y + z * z) * Math.Sqrt(x * x + y * y + z * z));
        }
 
        //skalarnoe proizvedenie
        public virtual double Skalar(Vektor V)
        { return x * x + y * y + z * z; }
        //umnozenie na skalar a
        public double Uskalar()
        {
            double a = 1;
            return a * x + a * y + a * z;
        }
        //sravnenie
        public bool Equals(Vektor v)
        {
            return v != null && v.GetType() == typeof(Vektor) && x == v.x && y == v.y && z == v.z;
        }
        public override int GetHashCode()
        {
            var hashCode = 373119288;
            hashCode = hashCode * -1521134295 + x.GetHashCode();
            hashCode = hashCode * -1521134295 + y.GetHashCode();
            hashCode = hashCode * -1521134295 + z.GetHashCode();
            return hashCode;
        }
        public override string ToString()
        {
            return $"{x} {y} {z}";
        }
 
 
    }
    //naslednik+pereopredelenie
    public class Naslednik : Vektor
    {
        public Naslednik(double x, double y, double z) : base(x, y, z)
        { }
 
        public override double Length()
        {
            return (Math.Sqrt(2 * x * x + 2 * y * y + 2 * z * z));
        }
    }
 
    public class Demo
    {
 
 
        public static void Main()
        {
            Vektor A = new Vektor(10, 7, 9);
            Vektor B = new Vektor(3, 5, 7);
            Console.WriteLine("A vektor: x={0},y={1},z={2}", A.x, A.y, A.z);
            Console.WriteLine("B vektor: x={0},y={1},z={2}", B.x, B.y, B.z);
            Console.WriteLine($"Summa : {A.Add(B)}");
            Console.WriteLine($"Raznost: {A.Razn(B)}");
            Console.WriteLine($"The scalar *****: {A.Skalar(B)}");
            Console.WriteLine("Dlina A  :   {0}    ", A.Length());
            Console.WriteLine("Dlina B  :   {0}  ", B.Length());
            Console.WriteLine($"Umnozenie na skalar-Vektor A: {A.Uskalar()}");
            Console.WriteLine($"Umnozenie na skalar-Vektor B: {B.Uskalar()}");
            Console.WriteLine($"Vektor v kvadrate-Vektor A: {A.Length(B)}");
            Console.WriteLine($"Ravni li: {A.Equals(B)}");
            Naslednik test = new Naslednik(3, 5, 7);
            Console.WriteLine($"Skalar umnozenij na 2 do izvlecenija kornja(nasledovanie+pereopredelenie): {test.Length()}");
 
            Console.WriteLine($"DEISTVIJA CEREZ DELEGATOV ");
            Operation oper;
            oper = A.Add;
            Console.WriteLine($"Summa : {oper(B)}");
 
            oper = A.Razn;
            Console.WriteLine($"Raznost: {oper(B)}");
 
            // Проверка двух векторов на одинаковость по х,y,x
            Vektor C = new Vektor(3, 5, 7);
            Console.WriteLine(B.Equals(C));
 
            // Проверка на одинаковость с наследником. Не должен быть одинаковым.
            Console.WriteLine(C.Equals(test));
            Console.WriteLine("Press Enter...");
            Console.ReadLine(); // Чтобы программа сразу не закрылась
        }
    }
}
1
 Аватар для ashsvis
923 / 503 / 202
Регистрация: 08.10.2018
Сообщений: 1,553
Записей в блоге: 11
23.10.2018, 12:05
Amigot, у Вас делегат Operation возвращает тип double, а методы Add() и Razn() тип Vektor,
отсюда и ошибка.
1
0 / 0 / 0
Регистрация: 23.10.2018
Сообщений: 123
23.10.2018, 12:37  [ТС]
А как привести явно ли неявно не подскажите...да выше есть полное решение и спасибо,но мне интересен этот момент
0
Эксперт JS
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
23.10.2018, 12:43
Amigot,
выше было неявное и правильное приведение.

А длинная форма нечитаема:
C#
1
oper = new Operation(A.Razn);
0
0 / 0 / 0
Регистрация: 23.10.2018
Сообщений: 123
23.10.2018, 12:45  [ТС]
Почему ?
0
Эксперт JS
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
23.10.2018, 12:48
Amigot, уродство потому что. Лишний мусор на экране.
1
 Аватар для ashsvis
923 / 503 / 202
Регистрация: 08.10.2018
Сообщений: 1,553
Записей в блоге: 11
23.10.2018, 13:03
Цитата Сообщение от amr-now Посмотреть сообщение
public override int GetHashCode()
{
var hashCode = 373119288;
hashCode = hashCode * -1521134295 + x.GetHashCode();
hashCode = hashCode * -1521134295 + y.GetHashCode();
hashCode = hashCode * -1521134295 + z.GetHashCode();
return hashCode;
}
Откуда такое?
0
0 / 0 / 0
Регистрация: 23.10.2018
Сообщений: 123
23.10.2018, 13:06  [ТС]
Это не моё,автор предидущий в своем варианте такое написал..
0
Эксперт JS
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
23.10.2018, 13:18
ashsvis, составная часть проверки на равенство.
0
0 / 0 / 0
Регистрация: 23.10.2018
Сообщений: 123
23.10.2018, 13:56  [ТС]
Всем Спасибо!!!!!!!!!
0
 Аватар для ashsvis
923 / 503 / 202
Регистрация: 08.10.2018
Сообщений: 1,553
Записей в блоге: 11
23.10.2018, 14:19
Цитата Сообщение от amr-now Посмотреть сообщение
составная часть проверки на равенство.
Вот эти волшебные цифры 373119288 и -1521134295, откуда они?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.10.2018, 14:19
Помогаю со студенческими работами здесь

При присвоении переменной textBox - ошибка
К примеру private: System::Void textBox1_TextChanged_1(System::Object^ sender, System::EventArgs^ e) { int a11 =...

Ошибка при присвоении числа переменной
Доброго времени суток. На днях дали задание написать алгоритм RSA. Вроде бы он легкий и понятный и ничего не предвещало беды.НО!!! Мой...

Странная ошибка при присвоении типа переменной
Странные вещи происходят: пишу Dim SheetsA As Excel.Sheets Set SheetsA = Application.Sheets(ActiveSheet.Name)Выдает ошибку 13 (Тип не...

Ошибка при присвоении переменной класса String^
Добрый день. Имеется переменная String^ new_chislo; и переменная String^ stroka = &quot;0123456789ABCDEF&quot;; проходя по циклу необходимо...

Ошибка при присвоении значения Range к переменной
Пытаюсь создать массив в котором будут размещены все непустые строки из диапазона А2:102. Sub Price() Dim price_for_Bill As Double ...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru