제가 말하는 것은 C#의 구조(struct)입니다. 여기서 말하는 구조는 C#의 언어 구조를 의미하지 않습니다. class. 아래에서는 클래스와 비교하여 이 구조체에 대해 설명하겠습니다.
다음 예제에서는 속성, 메서드 및 필드를 사용하는 방법을 설명합니다.
000 : // Structsstruct1.cs
001: using System;
002: struct SimpleStruct
003: {
004: PRivate int xval;
005: public int X
006 : {
007: get {
008: return xval;
009: }
010: set {
011: if (value < 100)
012: xval = value ;
013: }
014: }
015: public void DisplayX()
016: {
017: Console.WriteLine("저장된 값: {0}", xval );
018: }
019: }
020:
021: 클래스 TestClass
022: {
023: public static void Main()
024: {
025: SimpleStruct ss = new SimpleStruct();
026: ss. 이 예제의 출력은 다음과 같습니다.
저장된 값은 5
위 예제에서 구조를 볼 수 있습니다. 실제로 클래스를 사용하여 이 프로그램을 다시 작성하면 결과는 같습니다. 그러나 두 개의 동일한 항목이 함께 나타날 수는 없지만 구조(struct)는 값 유형입니다. class는 이런 방식으로 내장형과 같은 객체를 생성하는 데 사용할 수 있습니다.
또한, 클래스의 인스턴스를 생성하기 위해 new 키워드를 사용하면 해당 클래스가 할당됩니다. 힙과 new는 클래스의 인스턴스를 생성하는 데 사용됩니다. 구조체의 인스턴스가 할당되면 스택에 할당됩니다. 이렇게 하면 성능이 크게 향상됩니다(M$가 말했듯이). 다음 예를 다시 살펴보겠습니다.
000: // Structsstruct2.cs
002:
003: class TheClass004: {
005: 공개 int x;
006: }
007:
008: struct TheStruct
009: {
010: 공개 int x;
011: }
012:
013: 클래스 TestClass
014: {
015: public static void structtaker(TheStruct s)
016: {
017: s.x = 5;
018: }
019: public static void classtaker(TheClass c)
020: {
021: c.x = 5;
022: }
023: public static void Main()
024: {
025: TheStruct a = new TheStruct();
026: TheClass b = new TheClass();
027: a.x = 1;
028: b.x = 1;
029: structtaker(a );
030: classtaker(b);
031: Console.WriteLine("a.x = {0}", a.x);
032: Console.WriteLine("b.x = {0}", b.x );
033: }
034 : }
이 예제의 출력은 다음과 같습니다.
a.x = 1b.x = 5
이 예제에서 볼 수 있듯이 , 구조가 메소드에 전달되면 복사본일 뿐이고, 클래스가 전달되면 참조가 전달됩니다. 따라서 a.x=는 변경되지 않고 1을 출력하지만 b.x는 변경되었습니다. 또 다른 차이점은 구조입니다. new 없이 인스턴스화할 수 있지만 클래스는 그렇습니다. new 없이 구조체를 인스턴스화하면 모든 필드가 초기화될 때까지 모든 필드가 할당되지 않은 상태로 유지됩니다. 더 중요한 것은 구조입니다. 상속이 없습니다. 구조는 다른 클래스에서 상속할 수 없으며 다른 클래스의 기본 클래스일 수도 없습니다.
예 3:
interface IImage
{
}
struct Picture : IImage
{public void Paint()
{
// 그림 코드가 여기에 표시됩니다
}
}
위는 SUNWEN 튜토리얼 - C# 고급(7)의 내용입니다. 관련 내용을 더 주목해주세요. PHP 중국어 웹사이트(www.php) .cn)!