我正在學習 Visual Studio C#。我遇到了一些困難。我的背景是像 Basic & Cobol 這樣的程式性程式。下面是一些 C# 控制臺程式的示例代碼。
我得到了大部分,但我沒有得到這部分。
Box box = new Box();
Box box2;
box2 = new Box();
上面的陳述是我感到困惑的地方。
Box box = new Box();
這就是你的方式,好吧,我不知道技術名稱,但它允許你使用類以及代碼(方法)和變數(屬性)。
這兩行做同樣的事情。
Box box2;
box2 = new Box();
每條線的作用是什么?我知道某種副本是從 Box 類創建的。我知道您使用新名稱 box 或您選擇的任何名稱來參考該類。每條線的作用是什么?第一行是否只是創建對原始類的鏈接/參考?什么時候實際保留記憶體?類的變數/屬性什么時候被賦值/初始化?
就像我說的那樣,我已經撰寫程式代碼很多年了,每個命令都有一個功能。我習慣于知道每個命令的確切功能。它如何影響計算機和記憶體。誰能幫忙解釋一下電腦里發生了什么?記憶?
謝謝。
整個代碼如下。
using System;
namespace ClassesAndObjects
{
class Program
{
static void Main(string[] args)
{
// Create Object Class Type Box
Box box = new Box();
Box box2;
box2 = new Box();
Console.WriteLine("Enter Length: ");
double n1 = double.Parse(Console.ReadLine());
Console.WriteLine("Enter Breath: ");
double n2 = double.Parse(Console.ReadLine());
Console.WriteLine("Enter Height: ");
double n3 = double.Parse(Console.ReadLine());
//setting values
box.Length = n1;
box.Breath = n2;
box.Height = n3;
double volumn = box.getVolumn();
double area = box.getArea();
Console.WriteLine($"Box Dimensions Are: {box.Length}, {box.Breath}, {box.Height}");
Console.WriteLine($"Box Volumn is: {volumn}");
Console.WriteLine($"Box Area is: {area}");
// box 2
// you don't need to define n1, n2 & n3.
// They were already defined in box 1
// so the word double is not needed in front of
// n1, n2 & n3
Console.WriteLine("Enter Length box 2: ");
n1 = double.Parse(Console.ReadLine());
Console.WriteLine("Enter Breath box 2: ");
n2 = double.Parse(Console.ReadLine());
Console.WriteLine("Enter Height box 2: ");
n3 = double.Parse(Console.ReadLine());
//setting values
box2.Length = n1;
box2.Breath = n2;
box2.Height = n3;
//double volumn = box.getVolumn();
//double area = box.getArea();
// instead of storing the answers in variables
// we just call the method in the console writeline statement
Console.WriteLine($"Box Dimensions Are: {box2.Length}, {box2.Breath}, {box2.Height}");
Console.WriteLine($"Box Volumn is: {box2.getVolumn()}");
Console.WriteLine($"Box Area is: {box2.getArea()}");
}
}
class Box
{
public double Length { get; set; }
public double Breath { get; set; }
public double Height { get; set; }
// Here is a method
public double getVolumn()
{
return Length * Breath * Height;
}
public double getArea()
{
return Length * Breath;
}
}
}
uj5u.com熱心網友回復:
Box box2;
不創建 Box 物件。它創建一個可以保存對 Box 物件的參考的插槽。(我會使用“盒子”這個詞而不是“插槽”,但這會讓人困惑)
box2 = new Box();
現在我們創建一個盒子物件并將reference其放置在名為“box2”的插槽中
我們也可以在一行中完成所有操作
Box box3 = new Box();
我們可以更改 box3 指向的 Box 實體
box3 = box2
box2 和 box3 現在都指向同一個物件。box2 原來指向的那個 Box 現在會消失,沒有人再指向它了,我們無法找回它,它會被 Garbage Collected
uj5u.com熱心網友回復:
用最簡單的話...
Box box = new Box();
Box box2;
box2 = new Box();
第 2 行說您將有一個名為“box2”的變數,它還沒有,但總有一天會是一個 Box。
第 3 行實際上使它成為一個 Box。
第 1 行同時執行它們。
uj5u.com熱心網友回復:
對于像 Box 這樣的參考型別,僅在記憶體中分配一個地址,該地址創建對存盤當前值的實際記憶體位置的參考。
該行Box box;宣告了變數box并在記憶體中分配了一個地址。
緊隨其后的是box = new Box()您將類的實體分配Box給您宣告的變數。
宣告變數并將值賦值給變數Box box = new Box();,基本上都是連續進行的。
C# 中的原始型別(如int, float,...)的作業方式不同,因為它們立即分配了默認值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/450474.html
上一篇:Python中的類-何時使用括號
