English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
في C#،البنية هي نوع بيانات قيمة تمثل بنية البيانات. يمكن أن تحتوي على بناء مسبق للاستدعاء،بناء مسبق ثابت،مستويات،حقول،طرق،صفات،مؤشرات،عمليات حسابية،أحداث،وأنواع مدمجة.
يمكن استخدام struct لتح Konservieren nicht-erbliche kleine Datenwerte، مثل Punktekoordinaten، Paare مفتاح-قيمة وструкتورات بيانات معقدة.
يُستخدم مفتاح struct لتحديد الهيكل. المعدل الافتراضي هو المعدل الداخلي للمفردات والمكونين من الهيكل.
في المثال التالي، يتم إعلان بنية رسم الإحداثيات.
struct Coordinate { public int x; public int y; }
مثل متغيرات النوع الأساسي، يمكن استخدام أو عدم استخدام عمودي new لإنشاء عناصر الهيكل.
struct Coordinate { public int x; public int y; } Coordinate point = new Coordinate(); Console.WriteLine(point.x); // الناتج: 0 Console.WriteLine(point.y); // الناتج: 0
في الأعلى، تم إنشاء عنصر الهيكل Coordinate (الإحداثيات) باستخدام كلمة المفتاح new. يتم استدعاء بناء الهيكل الافتراضي غير المعتمد على الت参数، الذي يقوم بتحديد جميع الأعضاء إلى القيم الافتراضية الخاصة بيانواعهم.
إذا تم إعلان متغير نوع الهيكل دون استخدام كلمة المفتاح new، فإنه لا يتم استدعاء أي بناء، لذا تبقى جميع الأعضاء في حالة غير منقولة. لذلك، قبل الوصول إلى أي عضو، يجب تخصيص قيمته، وإلا ستكون هناك أخطاء في وقت التجميع.
struct Coordinate { public int x; public int y; } Coordinate point; Console.Write(point.x); // خطأ في وقت التجميع point.x = 10; point.y = 20; Console.Write(point.x); //الناتج: 10 Console.Write(point.y); //الناتج: 20
لا يمكن للهيكل (البنية) أن يحتوي على بناء غير معتمد على الت参数. يمكن أن يحتوي فقط على بناء معتمد على الت参数 أو بناء ثابت.
struct Coordinate { public int x; public int y; public Coordinate(int x, int y) { this.x = x; this.y = y; } } Coordinate point = new Coordinate(10, 20); Console.WriteLine(point.x); //الناتج: 10 Console.WriteLine(point.y); //الناتج: 20
يجب أن تحتوي وظيفة التركيب المعتمدة على الت参数 على جميع أعضاء الهيكل، وأن تُنقل إليهم؛ وإلا فإن إذا بقي أي عضو غير منقول، سيخرج مبرمج C# خطأً في وقت التجميع.
يمكن للهيكل (البنية) أن يحتوي على خصائص، خصائص مكتوبة تلقائيًا، طرق، وما إلى ذلك، مثل الفئات.
struct Coordinate { public int x { get; set; } public int y { get; set; } public void SetOrigin() { this.x = 0; this.y = 0; } } Coordinate point = Coordinate(); point.SetOrigin(); Console.WriteLine(point.x); // الناتج: 0 Console.WriteLine(point.y); // الناتج: 0
الأسطر التالية تشمل الطرق الثابتة.
struct Coordinate { public int x; public int y; public Coordinate(int x, int y) { this.x = x; this.y = y; } public static Coordinate GetOrigin() { return new Coordinate(); } } Coordinate point = Coordinate.GetOrigin(); Console.WriteLine(point.x); // الناتج: 0 Console.WriteLine(point.y); // الناتج: 0
يمكن للـ "struct" أن يحتوي على إشعارات تنبيه المستمعين إلى بعض العمليات. تتضمن هذه "struct" أحداثًا.
struct Coordinate { private int _x, _y; public int x { get{ return _x; } set{ _x = value; CoordinatesChanged(_x); } } public int y { get{ return _y; } set{ _y = value; CoordinatesChanged(_y); } } public event Action<int> CoordinatesChanged; }
تتضمن هذه "struct" أحداث "coordinateChanged"، التي تُطلق عند تغيير إحداثيات x أو y. يوضح المثال التالي كيفية معالجة أحداث "CoordinateChanged".
class Program { static void Main(string[] args) { Coordinate point = new Coordinate(); point.CoordinatesChanged += StructEventHandler; point.x = 10; point.y = 20; } static void StructEventHandler(int point) { Console.WriteLine("تغيير الإحداثيات إلى {0}", point); } }
النوع "struct" هو نوع قيمة، لذا هو أسرع من كائنات الفئات. استخدم "struct" عندما تريد فقط حفظ البيانات. عادةً، تناسب "struct" برمجة الألعاب. ولكن، من السهل نقل كائنات الفئات أكثر من "struct"، لذا لا تستخدم "struct" عند نقل البيانات عبر الشبكة أو عبر أنواع أخرى.
يمكن للـ struct أن يشمل بناء مسبق للنوع، القيم الثابتة، الحقول، الطرق، الصفات، المؤشرات، المعامل، الأحداث والأنواع المدمجة.
لا يمكن للـ struct أن يحتوي على بناء مسبق للنوع أو مدمج.
يمكن للـ struct تنفيذ نفس الواجهات التي يمكن للفئات تنفيذها.
لا يمكن للـ struct توريث هيكل آخر أو فئة، ولا يمكن أن تكون أساسًا لفئة.
لا يمكن للـ struct تحديد الأعضاء كأعضاء نظرية، مغلقة، افتراضية أو محمية.