클래스와 구조체는 .NET Framework에서 동일한 유형 시스템의 두 가지 기본 구성입니다. 둘 다 본질적으로 일련의 데이터와 동작을 논리 단위로 캡슐화하는 데이터 구조입니다. 데이터와 동작은 클래스나 구조체의 "구성원"이며 고유한 메서드, 속성, 이벤트 등을 포함합니다.
구조
구조는 C# 프로그래머가 자신의 값 유형을 정의하는 데 사용하는 가장 일반적인 메커니즘입니다. 구조는 메소드, 필드, 연산자 및 액세스 제어 등을 제공하므로 열거형보다 더 강력합니다.
구조는 클래스와 매우 유사하며 둘 다 데이터 멤버와 함수 멤버를 포함할 수 있는 데이터 구조를 나타냅니다. 그러나 클래스와 달리 구조체는 값 유형이므로 힙 할당이 필요하지 않습니다. 구조 유형의 변수는 구조의 데이터를 직접 포함하는 반면, 클래스 유형의 변수는 해당 데이터에 대한 참조만 포함합니다(참조된 데이터를 "객체"라고 함).
구조는 값 의미가 있는 작은 데이터 구조에 특히 유용합니다. 복소수, 좌표계의 점 또는 사전의 키-값 쌍은 모두 구조의 일반적인 예입니다. 이러한 데이터 구조의 핵심은 데이터 멤버 수가 적고 상속 또는 참조 식별자를 사용할 필요가 없으며 사용하기가 더 쉽다는 것입니다(할당 시 참조를 복사하는 대신 값을 직접 복사합니다). ).
키워드 struct를 사용하여 struct를 사용하는 구조의 본문입니다.
};
구조 선언에는 일련의 선택적 속성과 그 뒤에 일련의 선택적 구조 수정자가 포함됩니다. 그 다음에는 struct 키워드와 구조 이름을 지정하는 데 사용되는 식별자, 선택적 구조 인터페이스 사양, 마지막으로 구조 본문, 필요한 경우 세미콜론이 옵니다.
구조 선언에는 필요에 따라 구조 수정자를 포함할 수 있습니다: new, public, protected, Internal, private
구조 사용 구조체에 대한 기본(인수 없음) 생성자를 정의하는 것은 실수이며, 구조체의 인스턴스 필드를 다시 초기화하는 것은 실수입니다. 구조체 멤버 초기화는 두 가지 방법으로 수행할 수 있습니다. 하나는 매개 변수가 있는 생성자를 사용하는 것이고, 다른 하나는 구조체를 선언한 후 별도로 멤버에 액세스하는 것입니다. 모든 전용 멤버나 액세스할 수 없는 멤버는 생성자에서만 초기화할 수 있습니다. new 연산자를 사용하여 구조체 객체를 생성하면 구조체 객체가 생성되고 해당 생성자가 호출됩니다. 클래스와 달리 구조체는 new 연산자를 사용하지 않고도 인스턴스화할 수 있습니다. 이 경우 생성자 호출이 없으므로 할당 효율성이 향상됩니다. 그러나 필드는 할당되지 않은 상태로 유지되며 모든 필드가 초기화될 때까지 개체를 사용할 수 없습니다.
OOP 방식에서 클래스는 현실 세계에 대한 높은 수준의 추상화 및 일반화이며, 객체는 클래스의 인스턴스입니다. 객체는 해당 클래스의 공통된 특성과 동작 규칙을 가져야 합니다. 물론, 객체는 해당 범주에 지정되지 않은 특성과 행동 규칙을 가질 수도 있습니다. 이는 실제 생활과 동일합니다. 이러한 시뮬레이션과 추상화는 사람들의 사고 습관과 더 일치합니다. 이것이 OOP 방법이 강력한 활력을 갖고 점점 더 많은 소프트웨어 작업자가 환영하고 많은 컴퓨터 개발자가 지원할 수 있는 이유입니다. .
C#의 클래스 선언은 class 키워드를 통해 인스턴스화됩니다. 형식은 다음과 같습니다.
수정자 클래스 클래스 이름: 기본 클래스 또는 인터페이스
{
클래스 본문
}
’ ‐ ‐ ‐ "수정자", ": 기본 클래스 또는 인터페이스"는 선택 사항입니다. 클래스의 수정자는 다음 중 하나이거나 이들의 조합일 수 있습니다(동일한 수정자는 클래스 선언()에 여러 번 나타날 수 없습니다).
(1) new: 중첩 클래스를 선언할 때만 사용할 수 있습니다. 이는 클래스가 기본 클래스에서 상속되고 기본 클래스와 동일한 이름을 가진 멤버를 숨긴다는 것을 나타냅니다.
(2 )public: 클래스에 대한 접근이 제한되지 않음을 나타냅니다
(3)internal: 해당 클래스가 위치한 클래스만 접근할 수 있습니다
(4) Private: . NET에서 액세스할 수 있음 Access
(5)abstract: 추상 클래스, 클래스의 인스턴스 생성이 허용되지 않음
(6)sealed: 봉인된 클래스, 상속이 허용되지 않음
클래스 상속 문: C# 언어는 단일 상속만 지원합니다
(1), 생성자 및 소멸자
C#은 프로그램 보안 섹스를 강화하는 더 나은 메커니즘을 제공합니다. . C# 컴파일러에는 프로그램의 거의 모든 구문 문제를 찾을 수 있는 엄격한 유형 안전성 검사 기능이 있습니다. 그러나 프로그램이 컴파일 검사를 통과했다고 해서 오류가 더 이상 존재하지 않는다는 의미는 아닙니다.
C# 언어는 프로그램 오류 발생을 충분히 고려하여 잘 해결합니다. 즉, 객체 초기화 작업은 생성자에 두고 정리 작업은 소멸자에 두는 것입니다. 객체가 생성되면 생성자가 자동으로 실행됩니다. 객체가 죽으면 소멸자가 자동으로 실행됩니다.
생성자의 이름은 임의로 선택할 수 없습니다. 자동으로 실행되기 전에 컴파일러에서 인식되어야 합니다. 이름 지정 방법은 간단하고 합리적입니다. 생성자가 클래스와 동일한 이름을 갖도록 합니다. 이름 외에도 생성자의 또 다른 특징은 반환 값 유형이 void인 함수와 다른 반환 값 유형이 없다는 것입니다.
소멸자는 클래스 인스턴스의 소멸을 구현하는 메서드 멤버입니다. 소멸자는 매개변수를 가질 수 없고 수정자를 가질 수 없으며 호출될 수 없습니다. 소멸자와 생성자의 목적이 다르기 때문에 차이점을 보여주기 위해 소멸자 앞에 "~"를 붙입니다.
생성자와 소멸자는 공식적으로는 클래스 내에서 더 간단한 함수이지만. 그러나 그 사용은 보기만큼 간단하지 않으므로 생성자와 소멸자를 유연하고 정확하게 사용하면 사용자가 CLR의 메모리 관리 메커니즘을 더 잘 이해하고 시스템의 리소스를 더 잘 관리하는 데 도움이 될 수 있습니다.
(2), 클래스 및 객체
클래스는 동일한 속성과 서비스를 가진 객체의 모음입니다. 이는 속성과 서비스라는 두 가지 주요 부분을 포함하는 이 클래스에 속하는 모든 개체에 대한 통합된 추상 설명을 제공합니다. 객체 지향 프로그래밍 언어에서 클래스는 클래스 이름을 갖는 독립적인 프로그램 단위입니다. 클래스 이름에는 속성 설명과 서비스 설명이라는 두 가지 주요 부분이 포함됩니다.
객체(Object)란 시스템 내에서 객관적인 것을 기술하기 위해 사용되는 개체로서 시스템의 기본 단위이다. 객체는 속성 집합과 속성 집합에서 작동하는 서비스 집합으로 구성됩니다. 좀 더 추상적인 관점에서 보면, 객체는 문제 영역이나 구현 영역에 있는 어떤 것의 추상화이며 저장해야 하는 정보와 해당 사물이 시스템에서 수행하는 역할을 반영합니다. 이러한 속성에 대한 작업을 수행합니다. 작동하는 서비스 집합에 대한 래퍼입니다. 객관적 세계는 객체와 객체 간의 연결로 구성됩니다.
클래스와 객체의 관계는 몰드와 캐스팅의 관계와 같습니다. 클래스 인스턴스화의 결과는 객체입니다. 객체 유형의 추상화는 클래스입니다. 클래스는 동일한 특성(속성)과 동일한 동작(메서드)을 가진 개체 그룹을 설명합니다.
C# 구조 및 클래스와 관련된 더 많은 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!