C#知識:結構體
結構體是一種自定義數據類型,用戶可以根據自身需求設計自己的結構體用來表示某種數據集合。結構體是一種值類型,結合了值類型的優點,避免了引用類型的缺點。本文簡單介紹并探究一下C#中的結構體。
- 結構體一般寫在命名空間中
- 結構體中成員默認為private的,包括構造函數
- 結構體類似類,不過它是值類型,存儲在棧上
- 結構體支持運算符重載
- 結構體可以繼承接口
- 結構體中可以存在成員變量、構造函數、成員函數
- 結構體成員變量可在內部初始化*
- 結構體的構造函數可以只初始化部分成員變量*
- 結構體中可以自定義無參構造*
- 結構體不能有析構函數
- 結構體不能被繼承,成員變量和函數不能用protect關鍵字修飾
- 結構體不能被static修飾
- 結構體不能在內部聲明自身類型的結構體變量
namespace LearnStruct
{struct Point : IComparable<Point>{//結構體中可以存在成員變量、構造函數、成員函數//結構體不能有析構函數//結構體不能被繼承,成員變量和函數不能用protect關鍵字修飾//結構體不能被static修飾//結構體不能在內部聲明自身類型的結構體變量public int x = 2; //結構體成員變量在內部初始化public int y;int z;public Point() => Console.WriteLine("結構體無參構造被調用");public Point(int x) => this.x = x;public Point(int x, int y) : this(x) => this.y = y;public Point(int x, int y, int z) : this(x, y) => this.z = z;public int CompareTo(Point other){if (other.x > this.x)return -1;else if (other.x < this.x)return 1;return 0;}public void Print(){Console.Write($"x = {this.x},");Console.Write("y = {0},", this.y);Console.WriteLine("z = " + this.z);}public static Point operator +(Point _self, Point _other){return new Point(_self.x + _other.x, _self.y + _other.y, _self.z + _other.z);}}internal class Program{static void ChangeValue(Point point){point.x += 1;point.y += 1;}static void Main(string[] args){//結構體一般寫在命名空間中Point p1 = new Point(); //結構體無參構造被調用Point p2; //聲明結構體變量,需要進行初始化后才能使用p2 = new Point(); //結構體無參構造被調用Console.WriteLine(p1.x); //2Console.WriteLine(p2.x); //2//結構體中成員默認為private的,包括構造函數,p2.z點不出來//結構體類似類,不過它是值類型,存儲在棧上Point p3 = new Point(1, 2, 3);p3.Print(); //x = 1,y = 2,z = 3ChangeValue(p3);p3.Print(); //x = 1,y = 2,z = 3//結構體支持運算符重載Point p4 = new Point(3, 3, 3);Point p5 = new Point(6, 6, 6);Point p6 = p4 + p5;p6.Print(); //x = 9,y = 9,z = 9//結構體可以繼承接口List<Point> points = new List<Point>();points.Add(new Point(2, 3, 1));points.Add(new Point(9, 6, 3));points.Add(new Point(3, 5, 6));points.Add(new Point(8, 8, 8));points.Sort();foreach (Point p in points)p.Print();/*輸出:x = 2,y = 3,z = 1x = 3,y = 5,z = 6x = 8,y = 8,z = 8x = 9,y = 6,z = 3*/}}
}
參考資料:
- 《唐老獅C#》
本篇結束,感謝您的閱讀