클래스는 참조 유형이고 구조는 값 유형입니다.
클래스가 참조 유형이라고 말하면
기본적으로 인스턴스 변수의 주소가 포함됩니다.
예를 들면 다음과 같습니다.
Class MyClass
{
Public Int DataMember; //By default, accessibility of class data members
//will be private. So I am making it as Public which
//can be accessed outside of the class.
}
메인 메소드
에서이 클래스에 대한 메모리를 할당하고 해당 클래스
의 기본 주소를 MyClass 유형 변수 (_myClassObject2)에 저장하는 새로운 연산자를 사용 하여이 클래스의 인스턴스를 만들 수 있습니다 .
Static Public void Main (string[] arg)
{
MyClass _myClassObject1 = new MyClass();
_myClassObject1.DataMember = 10;
MyClass _myClassObject2 = _myClassObject1;
_myClassObject2.DataMember=20;
}
위 프로그램에서 MyClass _myClassObject2 = _myClassObject1; 명령은 MyClass 유형의 두 변수가
- myClassObject1
- myClassObject2
동일한 메모리 위치를 가리 킵니다.
기본적으로 동일한 메모리 위치를 동일한 유형의 다른 변수에 할당합니다.
따라서 MyClass 객체 유형 중 하나에서 변경 한 내용이
모두 동일한 메모리 위치를 가리 키기 때문에 다른 유형에 영향을 미칩니다 .
"_myClassObject1.DataMember = 10;" 이 줄에서 두 개체의 데이터 멤버는 모두 10의 값을 포함합니다.
"_myClassObject2.DataMember = 20;" 이 줄에서 객체의 데이터 멤버는 모두 20의 값을 포함합니다.
결국 우리는 포인터를 통해 객체의 데이터 멤버 에 액세스합니다.
클래스와 달리 구조는 값 유형입니다. 예를 들면 다음과 같습니다.
Structure MyStructure
{
Public Int DataMember; //By default, accessibility of Structure data
//members will be private. So I am making it as
//Public which can be accessed out side of the structure.
}
Static Public void Main (string[] arg)
{
MyStructure _myStructObject1 = new MyStructure();
_myStructObject1.DataMember = 10;
MyStructure _myStructObject2 = _myStructObject1;
_myStructObject2.DataMember = 20;
}
위 프로그램에서
new 연산자를 사용하여 MyStructure 유형의 객체를 인스턴스화하고 MyStructure 유형의
_myStructObject 변수에 주소를 저장하고
"_myStructObject1.DataMember = 10"을 사용하여 구조의 데이터 멤버에 값 10을 할당합니다.
다음 줄에서는
MyStructure 유형의 다른 변수 _myStructObject2를 선언하고 _myStructObject1을 할당합니다.
여기서 .NET C # 컴파일러는 _myStructureObject1 개체의 다른 복사본을 만들고
해당 메모리 위치를 MyStructure 변수 _myStructObject2에 할당합니다.
따라서 _myStructObject1에서 변경 한 내용이 MyStructrue 유형의 다른 변수 _myStructObject2에 영향을 미치지 않습니다.
그렇기 때문에 우리는 구조가 가치 유형이라고 말합니다.
따라서 클래스의 직접적인 Base 클래스는 Object이고 Structure의 직접적인 Base 클래스는 Object에서 상속되는 ValueType입니다.
클래스는 상속을 지원하지만 구조는 지원하지 않습니다.
우리는 어떻게 말합니까?
그리고 그 이유는 무엇입니까?
답은 수업입니다.
추상적, 봉인, 정적 및 부분적 일 수 있으며 개인, 보호 및 보호 내부 일 수 없습니다.