728x90
Virtual(가상)
- abstract와는 다르게 본문을 정의할 수 있다. (비워 놓아도 됨)
- 파생 클래스에서 재정의 할 수 있다.
- 자식 클래스에서는 new 또는 override 키워드 사용이 가능하다.
- override는 재정의 또는 확장의 의미
- new는 기본 클래스를 숨긴다는 의미
- base. 키워드를 통해 부모 클래스의 함수 호출이 가능하다.
- private, static 등 접근 한정자는 사용할 수 없다.
public class Parent
{
public virtual void func1() { }
}
public class Child : Parent
{
public override void func1()
{
base.func1();
Console.WriteLine("재정의");
}
}
Abstract(추상)
- 메서드에 사용하려면 해당 클래스도 abstract로 선언되어야 한다.
- 해당 키워드로 선언된 메서드는 본문을 정의할 수 없다.
- 자식 클래스는 바드시 부모의 abstract 메서드를 재정의 해야 한다.
- private 키워드를 사용할 수 없다.
- 새로운 객체 생성이 안 된다. ex) Exam exam = new Exam(); -> x
abstract class Parent
{
public abstract void func1();
public abstract void func2();
}
class Child : Parent
{
public override void func1()
{
throw new NotImplementedException();
}
public override void func2()
{
throw new NotImplementedException();
}
}
Interface
- 인터페이스는 객체를 생성할 수 없다.
- 멤버 변수를 포함할 수 없다.
- 접근 제한자는 public 만을 지원한다.
- 인터페이스의 메서드를 자식 클래스에서 구현할 경우 반드시 public을 사용해야 한다.
- 다중 상속이 가능하다. (클래스는 다중 상속이 불가능)
- 인터페이스의 모든 메서드를 자식 클래스에서 재정의 해야 한다.
interface Inter1
{
void inter1();
}
interface Inter2
{
void inter2();
}
interface Inter3
{
void inter3();
}
public class Child : Inter1, Inter2, Inter3
{
public void inter1()
{
throw new NotImplementedException();
}
public void inter2()
{
throw new NotImplementedException();
}
public void inter3()
{
throw new NotImplementedException();
}
}
[출처]
728x90
'C#' 카테고리의 다른 글
Regular Expression (Regex 클래스) (0) | 2024.02.19 |
---|---|
힙, 스택 그리고 GC (0) | 2023.12.20 |
리플렉션 Reflection (2) : 복잡한 if 문 대신 리플렉션으로 생성 함수 호출하기 (0) | 2023.11.05 |
IPC(Inter-Process Commnication) (0) | 2023.11.04 |
윈도우 메세지 종류들 List Of Windows Messages | WndProc (0) | 2023.11.04 |