C# virtual modifier, 버츄얼 클래스 변경자
오늘은 virtual modifier, 클래스 변경자에 대해서 알아보자.
virtual 키워드는 method, property, indexer, 혹은 event declaration을 변경해서, 이들이 파생된 클래스에서 overridden (덮어쓰기) 가 가능해 지도록 한든다고 한다.
예시로,
public virtual double Area()
{
return x * y;
}
이러한 virtual method는 이를 상속받는 어떠한 클래스에서도 override 할 수 있다.
실제로 베이스 클래스와 derived 클래스에서 어떤 식으로 virtual - override modifier들이 쓰이는 지 살펴보자.
class MyBaseClass
{
// virtual auto-implemented property. Overrides can only
// provide specialized behavior if they implement get and set accessors.
public virtual string Name { get; set; }
// ordinary virtual property with backing field
private int num;
public virtual int Number
{
get { return num; }
set { num = value; }
}
}
class MyDerivedClass : MyBaseClass
{
private string name;
// Override auto-implemented property with ordinary property
// to provide specialized accessor behavior.
public override string Name
{
get
{
return name;
}
set
{
if (!string.IsNullOrEmpty(value))
{
name = value;
}
else
{
name = "Unknown";
}
}
}
}
위 코드에서 MyBaseClass는 Name 이라는 자동 설정자, 획득자를 갖는 property를 포함하고 있다.
MyDerivedClass는 MyBaseClass를 상속하는데, Derived 클래스에서는 다른 getter와 setter를 설정하고 있다.
그래서 MyDerivedClass에서는 Name을 override modifier를 붙여서 정의하였고,
getter와 setter를 기본 설정된 것과는 다른 규칙을 갖는 function으로 바꾸어 주었다.
이렇게 C#에서는 클래스 상속에서 method, property 등이 자동으로 상속되지 않으므로, 원하는 method, property에 virtual modifier를 붙여주고 실제로 implement 하는 derived 클래스에서는 override modifier를 붙여서 정의해 주어야 한다.