實體instance
寫一個方法來輸出2d 坐標點:{x:15, y:10}這個坐標點的數據:
1
2
3
4
5
6
7
8
9
10
11
//2d 坐標點:{x:15, y:10}
static void Main(string[] args)
{
//2d 坐標點:{x:15, y:10}
DrawPoint(15, 10);
Console.Read();
return;
}
public static void DrawPoint(int x, int y) =>
Console.WriteLine($"左邊點為 x: {x}, y: {y}");
以上範例,經度x和緯度y應該被看作一個統一的整體,所以我們在DrawPoint中,應該將經度x和緯度y以整體的形式傳遞進來,而不是拆開分別處理。
所以我們要從面向對象(物件導向)的思想出發,把傳遞給DrawPoint方法參數中的 x軸和 y軸的數據統一起來,轉化為一個整體的坐標點對象(物件)point,而這個參數point將會包含x軸和y軸的信息。
不過現在這個坐標點point的數據類型我們還沒有定義,所以對於程序來說,它是一個不確定的數據類型,對於一個不能確定類型的對象(物件),可以使用 dynamic作為它的類型。
不過對於point對象(物件)有一點是可以確定的,接下來我們將會使用 x和 y 分別代表橫縱坐標的信息,所以這個時候,x軸和y軸都將會是參數坐標點換成的內部數據,我們可以使用對象(物件)的鍵式結構來進行訪問,所以簡單的使用point.x 和point.y就可以輸出數據了。
1
2
public static void DrawPoint(dynamic point) =>
Console.WriteLine($"左邊點為 x: {point.x}, y: {point.y}");
這時候我們在main方法中調用DrawPoint的時候,同樣也可使用動態數據類型dynamic。
動態數據類型的創建需要使用new這個關鍵詞,而它的數據結構非常簡單,使用大括號來處理所有的成員變量new { x = 15, y = 10 };,這時候我們還需要用dynamic或是 var來引導一下變量的類型,坐標點名稱a等於new一個動態數據dynamic a = new { x = 15, y = 10 };,最後方法調用的時候,就可以使用這個a作為一個整體來替換x和y 的數據了。
1
2
3
4
5
6
7
8
9
10
11
12
static void Main(string[] args)
{
//2d 坐標點:{x:15, y:10}
//dynamic var
dynamic a = new { x = 15, y = 10 };
DrawPoint(a);
Console.Read();
return;
}
public static void DrawPoint(dynamic point) =>
Console.WriteLine($"左邊點為 x: {point.x}, y: {point.y}");
一般來說,坐標點我們都會使用數字來進行表示,可以為整數或者是浮點數,但問題是,在 DrawPoint方法中,參數 point我們沒有進行任何類型的限制,所以在參數 point中,即使使用了非數字的坐標點,也是可以正常運行的。
比如說, DrawPoint參數傳入一個新的對象, DrawPoint(new { x = "阿來克斯", y = "liu" });,甚至我們可以使用一個完全不相干的動態對象,x改成天氣,y改成溫度DrawPoint(new { weather = "晴天", temperature = "26℃" });,那麼這個時候雖然visual studio不會報錯,但是,不管是我們的程式碼邏輯、還是業務邏輯,都徹底的錯誤了。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
static void Main(string[] args)
{
//2d 坐標點:{x:15, y:10}
//dynamic var
dynamic a = new { x = 15, y = 10 };
DrawPoint(a);
//那麼這個時候雖然visual studio不會報錯,但是,不管是我們的程式碼邏輯、還是業務邏輯,都徹底的錯誤了。
DrawPoint(new { x = "阿來克斯", y = "liu" });
DrawPoint(new { weather = "晴天", temperature = "26℃" });
Console.Read();
}
public static void DrawPoint(dynamic point) =>
Console.WriteLine($"左邊點為 x: {point.x}, y: {point.y}");
這時候如果運行程式,就會發現在運行過程中會彈出錯誤,這時候我們該如何處理呢?現在就轉到我們的class類別出場了。
類別class
使用 class可以聲明一個對象(物件)的具體類型,也可以對這個對象(物件)的行為加以限制,實際上,C#中所有的對象(物件)都可以使用類來進行處理。
現在我們來針對這個坐標點point創建它的類class:
聲明一個類,需要用一個關鍵字class,接著為類的名稱Point,兩個成員變量x、y,給它們整數類型 int,因為需要被外部訪問,所以加上 public
1
2
3
4
public class Point {
public int x;
public int y;
}
接著我們就可以在main 方法中使用了
- 類的實體化
Point a = new Point(); - 數據的初始化
a.x = 15;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
static void Main(string[] args)
{
//2d 坐標點:{x:15, y:10}
//dynamic var
Point a = new Point(); //類的實體化
a.x = 15; //數據的初始化
a.y = 10;
DrawPoint(a);
Console.Read();
}
public static void DrawPoint(Point point) =>
Console.WriteLine($"左邊點為 x: {point.x}, y: {point.y}");
public class Point {
public int x;
public int y;
}