태그 보관물: 구조체

C# 구조체와 인터페이스

클래스는 상속과 다형성을 지원하는 형식을 정의합니다. 이를 통해 파생 클래스의 계층 구조를 기반으로 정교한 동작을 만들 수 있습니다. 이와 대조적으로 ‘구조체’ 형식은 보다 단순한 형식으로, 기본 용도는 데이터 값을 저장하는 것입니다.* 구조체는 기본 형식을 선언할 수 없으며, System.ValueType에서 암시적으로 파생됩니다. struct 형식에서 다른 struct 형식을 파생할 수 없으며 암시적으로 봉인됩니다.

public struct Point 
{
     public double X { get; }
     public double Y { get; }

     public Point(double x, double y) => (X, Y) = (x, y); 
}

‘인터페이스’는 클래스 및 구조체로 구현할 수 있는 계약을 정의합니다. 인터페이스는 메서드, 속성, 이벤트 및 인덱서를 포함할 수 있습니다. 인터페이스는 일반적으로 해당 인터페이스가 정의하는 멤버의 구현을 제공하지 않으며 단지 해당 인터페이스를 구현하는 클래스 또는 구조체에서 제공해야 하는 멤버를 지정합니다.

인터페이스는 ‘다중 상속’을 사용할 수 있습니다. 다음 예제에서 인터페이스 IComboBox는 ITextBox 및 IListBox를 둘 다 상속합니다.

interface IControl 
{
     void Paint(); 
} 

interface ITextBox : IControl 
{
     void SetText(string text); 
} 

interface IListBox : IControl 
{
     void SetItems(string[] items); 
} 

interface IComboBox : ITextBox, IListBox { }

클래스 및 구조체는 여러 인터페이스를 구현할 수 있습니다. 다음 예제에서 클래스 EditBox는 IControl 및 IDataBound를 둘 다 구현합니다.

interface IDataBound 
{
     void Bind(Binder b); 
} 

public class EditBox : IControl, IDataBound 
{
     public void Paint() { }
     public void Bind(Binder b) { } 
}

클래스 또는 구조체가 특정 인터페이스를 구현하는 경우 해당 클래스 또는 구조체의 인스턴스를 해당 인터페이스 형식으로 암시적으로 변환할 수 있습니다. 예를 들면 다음과 같습니다.

EditBox editBox = new EditBox();
IControl control = editBox; 
IDataBound dataBound = editBox;

최신글