1
1

Как компилятор понимает какой тип данных я отправляю в метод ( в данном случае Int или double), если объявление идет цифрами (как и было показано в решении)?

У меня получилось отработать метод с 2 перезагрузками, только тогда когда я объявил переменные заранее и уже эти переменные отправлял в метод.

Треугольник я представил равнобедренным, чтобы было проще проверить работу программы.
скриншоты моего кода:

main - https://ibb.co/sPvjdvM

class Calculater - https://ibb.co/y4G8WdX

Результат - https://ibb.co/fMTW94Q

Но если переменные не объявлять отдельно, а значения указывать в методах, то получается казус:

main2 - https://ibb.co/hc15h8r

в классе я ничего не менял

Результат2 - https://ibb.co/mbTsZdC

Я парвильно разобрался, что проблема именно в переменных? Или у меня где-то еще ошибки?

using System;
using System.Linq;
using System.Collections.Generic;


namespace B_DZ1
{
    class Program
    {
        static void Main(string[] args)
        {
            Calculater calc = new Calculater();
            double ab = 10;
            double bc = 10;
            double ac = 10;
            int corner = 60;
            double h = 8.66;

            double result1 = calc.CalcTiengelSquar(ab, bc, ac);
            double result2 = calc.CalcTiengelSquar(ab, h);
            double result3 = calc.CalcTiengelSquar(ab, ac, corner);

            Console.WriteLine($"Result1: {result1}\nResult2: {result2}\nResult3: {result3}");
  

        }
    } 
}

using System;
using System.Collections.Generic;
using System.Text;

namespace B_DZ1
{
    public class Calculater
    {
        public double CalcTiengelSquar (double ab, double bc, double ac)
        {
            double p = (ab + bc + ac) / 2;

            return  Math.Sqrt(p * (p - ab) * (p - bc) * (p - ac));
        }
        public double CalcTiengelSquar(double ab, double h)
        {
            return 0.5 * ab * h;
        }
        public double CalcTiengelSquar(double ab, double ac, int corner)
        {
            return 0.5 * ab * ac * Math.Sin((Math.PI*corner)/180);
        }

    }
}

Upd:

Я Дополнительно проверил и если заполнять дабл значения с точной, то компилятор все понимает отлично и программа отрабатывает корректно.

double result1 = calc.CalcTiengelSquar(10.0, 10.0, 10.0);
double result2 = calc.CalcTiengelSquar(10.0, 8.66);
double result3 = calc.CalcTiengelSquar(10.0, 10.0, 60);

В решении задачи лучше было бы обозначить эту проблему, так как это исходя из ответа совсем не очевидно


Константин Павленко
3 years ago






Привет!

тоже прохожу этот курс и мне кажется я понимаю в чем проблема...

когда ты указываешь 3 int, как параметры, например (10, 10, 10), то компилятор ищет метод с int-ами и в результате, из всех методов, выбирает метод, где один параметр соответствует, а остальные можно преобразовать... вместо метода, где преобразовывать (подгонять под стандарт) нужно все три.

как вариант можно сделать так:
double square2 = calc.CalcTriangleSquare(ab: 40, bc: 20, ac: 30);

и путаницы не возникнет, мне кажется в этом и был смысл задания.

больше о преобразованиях:
https://docs.microsoft.com/ru-ru/dotnet/csharp/language-reference/operators/user-defined-conversion-operators 

Balticday
3 years ago

Один ответ