Конкретная форма конструктора в C # - PullRequest
4 голосов
/ 26 января 2009

Я изучаю ИКТ. Один из моих курсов - C #, а другой - физика. Наш учитель физики использовал Visual Studio для анимации некоторых движений и дал нам код, который он использовал для этого. Он сказал нам, чтобы посмотреть это. Вот что я не узнаю:

public static Vector operator + (Vector v1, Vector v2)
{
    return new Vector(v1.X + v2.X, v1.Y + v2.Y, v1.Z + v2.Z);
}

Предполагается, что это конструктор, но я никогда не видел ничего подобного раньше. Я не знаю, как это называется, поэтому я не знаю, что гуглить.

Может кто-нибудь просветить меня, пожалуйста?

Ответы [ 8 ]

10 голосов
/ 26 января 2009

Это называется "перегрузка оператора". Это не конструктор, но возвращает новый вектор.

См: Перегрузка оператора

4 голосов
/ 26 января 2009

Это не конструктор. Это операторный метод для оператора «+». Он определяет, что происходит, когда вы делаете что-то вроде следующего: -

var Vector v1 = new Vector(1,2,3);
var Vector v2 = new Vector(1,2,3);
var Vector v3 = v1 + v2;
3 голосов
/ 26 января 2009

Это перегружает оператор '+' для класса Vector, поэтому всякий раз, когда вы делаете 'v1 + v2', этот код выполняется.

3 голосов
/ 26 января 2009

Он перегружает оператор "+" для класса Vector. См. здесь для получения дополнительной информации по теме.

2 голосов
/ 26 января 2009

Это не конструктор, а перегрузка оператора для + Вот как вы перегружаете поведение для:

Vector a = new Vector();
Vector b = new Vector();
Vector c = a + b;

Больше информации в статье MSDN .

0 голосов
/ 24 января 2010

Он действительно перегружает оператор +.

что это значит? ну это просто:

если у вас есть это:

int i = 10;
int j = 20;
int x = i + j;

В этом примере x будет 30, потому что C # знает, используем ли мы целые числа и используем +, что нам нужно взять сумму.

Но теперь вы работаете с векторами. Трехмерный вектор имеет 3 значения: X, Y и Z. Если вам нужна сумма из 2 векторов, как вы работаете? это идет как

v1.X + v2.Y and v1.Y + v2.Z and v1.Z + v2.X  

или C # должен сделать это так:

v1.X + v1.Y and v1.Z + v2.X and v2.Y + v2.Z

С перегрузкой оператора вы определяете, как оператор + должен быть реализован при использовании Векторов. В нашем случае это:

v1.X + v2.X and v1.Y + v2.Y and v1.Z + v2.Z 

не так сложно;)

0 голосов
/ 26 января 2009

перегружен + оператор. Все языки ООП (за исключением Java, возможно, должны проверять ссылки) допускают перегрузку операторов.

0 голосов
/ 26 января 2009

Линия:

оператор public public Vector + (Vector v1, Vector v2)

... не конструктор. Это просто перегрузка оператора + (плюс) для родительского класса. Я полагаю, родительский класс является уточненным векторным классом?

Строка:

вернуть новый вектор (v1.X + v2.X, v1.Y + v2.Y, v1.Z + v2.Z);

... Использует конструктор класса Vector для передачи трех аргументов (X, Y и Z выглядит так)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...