<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # C# 結構 > 原文: [https://zetcode.com/lang/csharp/structures/](https://zetcode.com/lang/csharp/structures/) C# 教程的這一部分涵蓋結構。 ## C# 結構定義 結構是值類型。 該類型由`struct`關鍵字定義。 結構與類非常相似。 它們在某些方面有所不同。 結構旨在表示輕量級對象,例如`Point`,`Rectangle`,`Color`等。 在許多情況下,結構可能比類更有效。 結構是值類型,并在棧上創建。 注意,像`int`,`bool`,`float`之類的原始數據類型在技術上都是`struct`類型。 所有`struct`類型都繼承自`System.ValueType`,并且繼承自`System.Object`。 結構從來都不是抽象的,它們總是被隱式密封的。 因此結構類型不支持繼承。 因此,不能將`struct`數據成員聲明為受保護的。 `struct`定義不允許使用抽象修飾符和密封修飾符。 不允許`struct`聲明無參數的構造器。 結構還可以包含構造器,常量,字段,方法,屬性,索引器,運算符,事件和嵌套類型。 但是,如果我們需要實現更多這些功能,則可以考慮使用一個類。 結構可以實現接口。 `struct`可以用作`nullable`類型,并且可以分配為空值。 ## 簡單結構示例 以下示例創建一個簡單的結構。 `Program.cs` ```cs using System; namespace SimpleStructure { public struct Point { private int x; private int y; public Point(int x, int y) { this.x = x; this.y = y; } public override string ToString() { return String.Format("Point x:{0}, y:{1}", x, y); } } class Program { static void Main(string[] args) { var p = new Point(2, 5); Console.WriteLine(p); } } } ``` 該示例創建一個`Point`結構。 這個點也可以用一個類來表示,但是有了`struct`,我們的效率更高了。 特別是如果我們處理了很多問題。 ```cs public struct Point { ... } ``` 該結構用`struct`關鍵字聲明。 ```cs public override string ToString() { return String.Format("Point x:{0}, y:{1}", x, y); } ``` `struct`類型不支持繼承。 但是,我們可以對方法使用`override`關鍵字,`struct`類型隱式地從中繼承。 `ToString()`方法就是這種情況。 ```cs var p = new Point(2, 5); Console.WriteLine(p); ``` 我們創建`Point`結構,并在其上調用`ToString()`方法。 ```cs $ dotnet run Point x:2, y:5 ``` 這是示例的輸出。 ## 沒有`new`關鍵字 可以創建不帶`new`關鍵字的`struct`類型的實例。 `Program.cs` ```cs using System; namespace NoNewKeyword { public struct Person { public string name; public int age; } class Program { static void Main(string[] args) { Person p; p.name = "Jane"; p.age = 17; Console.WriteLine("{0} is {1} years old", p.name, p.age); } } } ``` 我們有一個`Person`結構,其中有兩個公共成員。 ```cs Person p; ``` 首先,我們聲明一個`Person`結構。 ```cs p.name = "Jane"; p.age = 17; ``` 稍后我們用一些數據初始化結構。 ```cs $ dotnet run Jane is 17 years old ``` 這是程序的輸出。 ## C# 結構是值類型 結構類型是值類型。 它們是在棧上創建的。 創建值類型時,僅在內存中分配了一個空間來存儲值。 值類型的分配將復制該值。 `Program.cs` ```cs using System; namespace ValueTypes { public struct Person { public Person(string name, int age) : this() { this.Name = name; this.Age = age; } public string Name { get; set; } public int Age { get; set; } public override string ToString() { return String.Format("{0} is {1} years old", Name, Age); } } class Program { static void Main(string[] args) { var p1 = new Person("Beky", 18); var p2 = p1; Console.WriteLine(p2); p2.Name = "Jane"; p2.Age = 17; Console.WriteLine(p2); Console.WriteLine(p1); } } } ``` 我們有一個帶有兩個數據成員的`Person`結構。 我們有兩個參數的構造器,我們也使用自動屬性。 ```cs public string Name { get; set; } public int Age { get; set; } ``` 可以在`struct`類型中使用自動屬性。 ```cs var p1 = new Person("Beky", 18); var p2 = p1; ``` 在這里,我們創建一個`struct`。 然后將創建的`struct`分配給另一個`struct`。 我們創建該結構的副本。 ```cs p2.Name = "Jane"; p2.Age = 17; ``` 我們更改第二個結構的數據。 第一個不受影響,因為我們正在處理原始`struct`類型的副本。 ```cs $ dotnet run Beky is 18 years old Jane is 17 years old Beky is 18 years old ``` This is the output of the program. ## 基本類型是結構 像`int`,`float`或`bool`之類的原始數據類型是內部結構。 這不同于 C++ 或 Java 之類的語言。 `Program.cs` ```cs using System; public class PrimitiveTypes { static void Main() { float x = 12.3f; int y = 34; bool z = false; Console.WriteLine(x.GetType()); Console.WriteLine(y.GetType()); Console.WriteLine(z.GetType()); } } ``` 我們有三個變量:`float`,`int`和`bool`。 我們對它們每個調用`GetType()`方法。 ```cs Console.WriteLine(x.GetType()); ``` 我們在浮點值上調用`GetType()`方法。 每個結構都隱式繼承自包含`GetType()`方法的`System.ValueType`類。 ```cs $ dotnet run System.Single System.Int32 System.Boolean ``` 這是示例的輸出。 我們可以在文檔中查找這些類型是結構。 在 C# 教程的這一部分中,我們介紹了結構。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看