C#의 인터페이스에서 속성 구현
오늘은 C#에서 인터페이스의 속성을 구현하는 방법을 배울 것입니다.
C#의 인터페이스는 속성 가용성을 선언하는 방법을 지정하는 액세스 한정자와 함께 다양한 속성을 가질 수 있습니다. 인터페이스는 종종 다른 멤버와 객체의 기본 구현으로 작동합니다.
인터페이스에서 속성을 구현할 수 있는 다양한 방법을 시작하고 살펴보겠습니다.
단순 코드 블록을 사용하여 인터페이스에서 속성 설정
TORQUE
속성을 사용하여 ENGINE
이라는 C# 인터페이스를 생성한다고 가정해 보겠습니다. 인터페이스 ENGINE
을 다음과 같이 설정합니다.
public interface ENGINE {
int torque { get; set; }
}
따라서 TORQUE
라는 속성에 대해 적절한 getter 및 setter가 있는 인터페이스를 만들었습니다. 인터페이스를 사용하려면 이 인터페이스를 구현할 수 있는 클래스를 정의해야 합니다.
ENGINE
을 포함하는 CAR
클래스를 정의한다고 가정해 보겠습니다. 따라서 다음과 같이 작성할 수 있습니다.
class CAR : ENGINE {
public int torque { get; set; }
}
CAR
클래스에는 이 클래스에서 객체를 생성할 때 공개적으로 사용할 TORQUE
구현이 포함되어 있습니다. CAR
객체를 사용하려면 다음과 같이 호출하면 됩니다.
CAR x = new CAR();
x.torque = 989;
Console.WriteLine(x.torque);
따라서 다른 속성을 사용하고 나중에 사용할 인터페이스에 포함할 수 있습니다. 이것은 더 나은 추상화 계층을 제공하고 기본 메서드나 클래스를 변경하지 않고도 수정할 수 있습니다.
따라서 LABEL
이라는 새 속성을 ENGINE
에 추가하려면 CAR
클래스에서 사용할 수 있는 ENGINE
인터페이스에서 설정할 수 있습니다.
전체 코드는 다음과 같습니다.
using System;
namespace CA_ONE {
class Program {
public interface ENGINE {
int torque { get; set; }
}
class CAR : ENGINE {
public int torque { get; set; }
}
static void Main(string[] args) {
CAR x = new CAR();
x.torque = 989;
Console.WriteLine(x.torque);
}
}
}
프로젝트 이름을 CA_ONE
으로 지정했습니다. 따라서 네임스페이스는 이를 확장하고 구현합니다. 여기서 주목해야 할 또 한 가지는 CAR
에서 TORQUE
의 구현은 PRINT
방법 또는 토크 변환 등과 같은 기능 내부에 다른 정의를 가질 수 있다는 것입니다.
C#에서 인터페이스의 속성 수정
위에 제공된 솔루션에서 구현 내에서 다른 메서드를 정의하는 방법을 언급했습니다. 인터페이스 ENGINE
에서 기본값으로 정의된 GET
및 SET
메소드를 확장한다고 가정해 보겠습니다.
ENGINE
은 그대로 두지만 이를 확장하는 CAR
클래스 내부의 코드를 수정하는 경향이 있습니다.
CAR
에서 TORQUE
를 설정할 때 TORQUE
속성이 올바르게 설정되었는지 여부를 사용자가 알 수 있도록 "Torque is Set to _value_"
도 인쇄할 수 있습니다.
따라서 다음과 같이 진행할 수 있습니다.
class CAR : ENGINE {
private int torque_priv;
public int torque {
get { return this.torque_priv; }
set {
this.torque_priv = value;
Console.WriteLine("This torque has been set to " + torque_priv);
}
}
}
이제 여기에서 코드에서 일어나는 일에 집중해 보겠습니다. 우리가 가장 먼저 알아차린 것은 TORQUE_PRIV
라는 다른 변수의 사용입니다.
다음 코드에 전달된 TORQUE
값을 저장해야 하기 때문에 인스턴스화했습니다.
x.torque = 989;
이 대신 TORQUE_PRIV
변수를 사용하지 않으면 코드가 루프에 빠져 TORQUE
속성에 값을 할당하기 위해 재귀적으로 이동합니다. 또한 여기에서 VALUE
라는 것을 사용했습니다.
VALUE
는 변수가 아니라 C# 내부의 컨텍스트 키워드입니다. VALUE
는 속성 및 액세스 선언의 집합 인덱서에서 사용됩니다.
클라이언트가 할당한 값을 가져와서 클래스의 private 변수에 할당합니다. 이러한 방식으로 선언을 수정하고 사용할 수 있습니다.
많은 사람들이 추상 CAR
에 대한 TORQUE
의 setter에서 다음 코드를 사용합니다.
this.torque_priv = torque;
그리고 GETTER의 경우:
return torque;
재귀 루프에 빠지기 때문에 다음과 같은 오류가 표시됩니다.
Stack overflow.
인터페이스에서 속성을 구현하기 위한 일반 구문은 다음과 같습니다.
type name { get; set; }
여러 클래스가 인터페이스를 상속하고 사용할 수 있으므로 추상 클래스의 속성을 확장하고 수정하는 것이 좋습니다. 인터페이스는 다양한 방법을 구현할 때 백본 구조 역할을 할 수 있으며 확장할 항목과 확장하지 말아야 할 항목에 대한 기본 아이디어를 제공할 수 있습니다.
인터페이스는 직접 사용할 수 없음을 기억하십시오. 코드를 실행하는 동안 추상 클래스를 초기화하고 사용해야 합니다.
인터페이스의 메서드는 항상 공용이며 암시적 액세스 수정자가 필요하지 않습니다. 또한 인터페이스는 다른 인터페이스에서 상속할 수 있습니다.
인터페이스에서 속성을 구현하려고 하고 다른 인터페이스가 이전에 정의된 인터페이스를 상속하는 경우 클래스를 사용하여 후자의 인터페이스를 확장할 수 있습니다.
BOLTS
를 상속한 다음 CAR
클래스에 의해 상속되는 ENGINE
인터페이스가 있다고 가정해 보겠습니다. 각 CAR
의 볼트 치수에 따른 렌치 크기의 비상 키트를 설치하려고 합니다.
따라서 다음과 같이 구현을 사용할 수 있습니다.
public interface BOLT {
int size { get; set; }
}
public interface ENGINE : BOLT {
int torque { get; set; }
그런 다음 CAR
클래스에서 BOLT
를 다음과 같이 확장합니다.
public int size {
get { return wrench_size; }
set {
// set the wrench size
wrench_size = value;
Console.WriteLine("The wrench size to use should be: " + wrench_size);
}
}
따라서 인터페이스가 상속되는 것을 볼 수 있습니다. 기본 인터페이스에서 속성을 설정하는 경우 기본 인터페이스 또는 파생 인터페이스를 확장하는 모든 클래스에서 해당 속성을 구현해야 합니다.
따라서 정의를 확장할 필요가 있습니다.
추상 클래스에서 다중 인터페이스 상속으로 속성 구현
ENGINE
과 WHEEL
이라는 두 개의 인터페이스가 있다고 가정해 보겠습니다. 그리고 둘 다 ENGINE
또는 WHEEL
이 시작되었는지 여부를 알려주는 시작 방법을 포함합니다.
시작 방법을 정의합시다.
public interface WHEEL {
void print();
}
public interface ENGINE : BOLT {
int torque { get; set; }
void print();
}
CAR
클래스에서 확장하려면 다음과 같이 몇 가지 기능을 작성해야 합니다.
void WHEEL.print() {
Console.WriteLine("Wheel has been started");
}
void ENGINE.print() {
Console.WriteLine("Engine has been started!");
}
그리고 그들을 부르려면 메인에 다음과 같이 작성하십시오.
((WHEEL)x).print();
이것은 print()
메소드를 사용할 인터페이스를 지정하는 것입니다.
이 튜토리얼에서 사용된 전체 코드에 액세스하려면 여기를 클릭하세요.
결론
인터페이스에서 속성을 사용하는 방법은 여기까지입니다. 속성을 설정하고 사용해야 하는 다른 상황이 있을 수 있습니다. 따라서 위에서 설명한 모든 경우를 연구하는 것이 좋습니다.
Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!
GitHub