NotAComputerScienceStudent Ответов: 3

Какова цель "этого"


итак, есть "это" - это c#, который многие учебники онлайн используют, но я не понимаю, что он на самом деле делает.

p.s объясните в непрофессиональных терминах, спасибо.

я использую его во время практики, но не понимаю его назначения

Что я уже пробовал:

class Circle
{
    float pi = 3.142f;
    int Rad;
    
    public Circle (int Radius)
    {
        this.Rad = Radius;
    }
    public float CaluculateAreaMethod()
    {
        return this.pi * this.Rad * this.Rad;
    }
}
class Program
{
    public static void Main()
    {
        Circle C1 = new Circle(5);
        float Area = C1.CaluculateAreaMethod();

        Console.WriteLine("Area = " + Area);
    }
}

Gerry Schmitz

Эквивалентное ключевое слово в VB.NET это "я".

(C# подразумевает: "это" - это я).

3 Ответов

Рейтинг:
21

Eric Lynch

То this ключевое слово относится к текущему экземпляру типа (например, Circle).

Однако в данном случае его использование излишне. Нет необходимости дифференцировать поля (pi и Rad) что он квалифицируется.

Подумайте, если бы вы переименовали поле уровня класса Rad как Radius В этом случае в конструкторе для круга будут названы две вещи Radius: параметр конструктора и поле уровня класса. Итак, в этом случае следующее использование this было бы необходимо провести различие между ними:

public Circle (int Radius)
{
    this.Radius = Radius;
}


Рейтинг:
2

OriginalGriff

Эрик абсолютно прав, но это может помочь вам думать о машинах вместо классов.
Вы привыкли к понятиям "моя машина" и "ваша машина"; "эта машина" и "та машина" - и осознаете, что каждая из них может быть разной или меняться в зависимости от обстоятельств. Это вы идете вдоль ряда транспортных средств, глядя на каждый по очереди, а затем "этот автомобиль" меняется по мере движения. Машины не меняются, но ваша ссылка на них меняется.

Ряд автомобилей-это набор экземпляров класса "автомобиль" , и когда вы идете, вы мысленно переназначаете "этот автомобиль" на каждый новый экземпляр по очереди, поэтому вы можете обсуждать каждый экземпляр, используя одни и те же слова: "какого цвета этот автомобиль?"; "какая марка этого автомобиля?"
Ответ меняется в зависимости от того, перед каким автомобилем вы в данный момент стоите, потому что каждый раз, когда вы спрашиваете, "этот автомобиль" проверяет, какой экземпляр автомобиля вы имеете в виду, и это конкретные данные.

this в C# служит той же цели: он ссылается на текущий экземпляр класса, который "доступен", когда выполняется ваш код - и будет меняться, поскольку ваш код вне класса использует разные экземпляры.

Он всегда доступен - за исключением статических методов, которые не работают с экземплярами, но которые имеют дело с вопросами, которые затрагивают все экземпляры: "сколько колес у автомобиля?" например, это статический вопрос, потому что вам не нужно ходить вокруг автомобиля, считая шины, чтобы знать, что результат "четыре" - если бы у него было только два, это был бы мотоцикл!

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

В этом есть смысл?


Eric Lynch

Хорошо, мне нравится аналогия. Хотя, для статических классов, как насчет этих фанковых трехколесных автомобилей :)

OriginalGriff

Они являются отклонением от нормы природы и должны быть классифицированы как (плохие) мотодельтапланы!

Рейтинг:
1

CPallini

Обычно документация помогает: это (ссылка на C#) | Microsoft Docs[^].