공부/c#

c# 상속 관련

Lectinua 2019. 6. 10. 23:00

sealed: 뒤에 public이든 protected이든 상속하지 못하게 함

ex) sealed public void Method() {}

 

overload: 여러 매개변수로 메서드를 만드는 것

ex) public void Method() {}

public void Method(int a) {}

public void Method(string a, int b) {}

 

virtual, override: 부모를 무시하고 재정의하는 것

parent ex) public virtual void Method() { Console.WriteLine("부모"); }

child ex) public override void Method() { Console.WriteLine("자식"); }

Main ex) Child test = new Child(); test.Method();

출력 결과: 자식

 

abstract: 형태만 구현, 부모에서 선언한 abstract 메서드를 자식에서 모두 구현해야함

추상 클래스는 선언하지 못함, 상속으로만 사용 가능

사용처: 정해진 형식으로 만들때

parent ex) abstract class Parent { public abstract void Method(); }

childex) class Child{ public override void Method(); }

 

다형성: 상위에서 하위 호출(일반적)

ex) Parent test = new Child();

 

new:  부모를 무시하고 재정의하는 것, override와 비슷하나 다름

재정의하고자하는 부모 메소드에 override가 들어가도 상관없이 새로 재정의함

다형성과 관련없이 자식 클래스에서 새로 정의함

ex) parent ex) public void Method() { Console.WriteLine("부모"); }

child ex) public new void Method() { Console.WriteLine("자식~"); }

Main ex) Child test = new Child(); test.Method();

Parent test2 = new Child(); test2.Method();

출력 결과: 자식~부모

 

interface: 다중 상속 가능

abstract처럼 구현없이 형식만 가지고 있음, 상속으로만 사용, 생성 불가

관례적으로 대문자 I를 인터페이스명에 붙임

ex) infterface IInterfacePrac { void Method(); }

infterface IInterfacePrac2 { void Method2(); }

class ClassPrac : IInterfacePrac, IInterfacePrac { public void Method() {}; public void Method2() {}; }