//추상(가상) 메소드 & 추상 클래스//
처리를 명시 하지 않고 호출한 쪽만 정의 된 것을 추상 메소드라고한다.
이러한 추상메소드들을 가진 클래스를 "가상(추상) 클래스"라고 한다.
-> 추상클래스의 객체는 생성 할 수 없다. 상속하여 추상 메소드를 오버라이드해야한다.
<정의>
* <abstract > 수식자를 사용하여 정의한다. ->new 로 객체 생성 불가능 *
abstract class Animal {
public string name;
public abstract void cry();
public void main(){
}
}
추상 클래스를 상속하여 객체를 생성하려면 <override>를 붙인 멤버가 있어야한다.
-> 추상 메소드는 반드시 오버라이드하여 사용해야한다.
(예)
public abstract class PureBase
{
// abstract C#키워드
public abstract int GetFirst();
public abstract int GetNext();
}
public class DerivedA : PureBase
{
private int no = 1;
// override C#키워드
public override int GetFirst()
{
return no;
}
public override int GetNext()
{
return ++no;
}
}
//인터페이스//
상속 관계가 없는 클래스에 기능을 제공하는 구조를 말한다. 클래스와 유사
but. 추상메소드, 추상 속성, 추상 인덱서, 이벤트 에서만 한정되고 클래스에 조립하는 형태로 사용된다.
<특징>
1. 인터페이스로 객체 생성 불가능
2. 인터페이스 내의 멤버는 구현부가 존재 하지 않는다.
3. 멤버는 default로 전부 public이 된다.
4. 내부에서 필드를 가질수 없다. { } 사용 불가능
5. 어떤 접근자. 한정자를 붙일수 없음
6. 여러개의 인터페이스를 장착 가능하다.
' : '를 사용하여 클래스에 장착 시켜 정의한다. 또 ' : '를 사용하여 클래스 처럼 상속하여 새로운 인터페이스를 만드는 것이 가능하다.
<정의>
//인터페이스 구현
interface A{
void SayA();
}
interface B{
void SayB();
}
//추상클래스 구현
abstract class Top{
public abstract void SayTop();
}
class TopTest : Top, A, B{
public void SayA(){}
public void SayB(){}
public override void SayTop(){}
상속의 원본 인터페이스와 상속 대상의 인터페이스에 같은 추상 메소드가 있을 때, 상속 대상의 추상 멤버에 new를 붙여 상속 대상을 우선 하게 해주어야한다.
(예) interface A {
void e();
void f();
}
interface B:A {
void g();
new void f();
}
//다형성//
상속한 클래스의 객체는 기본 클래스로 취급할 수도 있고, 파생클래스로도 취급이 가능하다.
이 처럼 한 개의 객체나 메소드가 많은 형태를 가지는 것을 "다형성"이라고 한다.
파생클래스의 객체는 기본 클래스의 객체에 대입할 수 있다. 하지만 파생클래스의 객체를 기본클래스의 객체에는 대입 할 수 없다.
<특징>
파생 클래스의 객체는 기본클래스의 객체 변수에 대입할 수 있다.
(예) A ab = new B();
메소드는 객체를 인수로 받을 수 있다. 기본 클래스의 객체를 받은 메소드에는 파생클래스의 객체를 전달 할 수 있다.
메소드는 실제 객체가 아니라 첨조 정보가 전달 된다.
//override 와 new//
클래스 A와 파생클래스 B가 있고 메소드 m이 두개의 클래스에 존재 할때,
1. override를 붙인 메소드의 경우, 객체 변수의 형에도 불구하고 인터페이스 형에 따라 참조 대상이 결정된다.
* override의 경우 , 클래스 b의 메소드가 사용된다.*
2. new를 붙인 경우에는 참조 대상의 객체 변수의 형에 따라 결정된다.
* new의 경우, 클래스 A의 메소드가 사용된다. *
//객체 클래스//
객체 클래스는 모든 클래스의 기본이 되는 클래스 이다.
모든 클래스는 객체 클래스를 상속하고 있다.
객체 클래스에는 참조형 뿐만 아니라 값형의 데이터도 대입이 가능하다
- 박싱 : 값형의 데이터를 객체형의 변수에 대입하는 것
<정의>
int a =10;
object ob;
ob =a;
-언박싱: 박싱의 역으로 값형에 객체형의 데이터를 대입하는 것을 말한다.
<정의>
int b = (int)ob;
//ob에 저장되어있던 값이 int형으로 저장된다.
*형을 명확하게 하기 위해 형변환을 사용한다.*
//네임스페이스//
같은 이름의 클래스 등이 경합을 일으키지 않도록 하는 것
클래스나 구조체의 그룹을 말한다.
<정의>
namespace A{
class Abc{
}
}
//클래스Abc는 네임스페이스A에 속혀 있다.
네임스페이스 안에 있는 클래스를 참조 하려면 ' . ' 사용한다.
같은 이름의 클래스나 구조체가 정의되어 있다고 해도 네임스페이스로 격리되어 있을 경우에는 경합이 일어나지 않는다.
->네임스페이스는 네임스페이스 안에 네임스페이스를 만드는 것이 가능하다.
<using 지시어>
<정의>
using R = Rishing;
(using 네임스페이스의 별명 = 네임스페이스)
- 지시어를 생략하고 명시 할 수 있다.
- 프로그램의 맨 앞이나 네임스페이스 블록의 맨 앞에 명시해야한다.
- 네임스페이스명이 길어져서 사용하기 곤란할때, 별명처럼 사용할 수 있다.
#참고: https://jshzizon.tistory.com/
'PROGRAMING📚 > C#📑' 카테고리의 다른 글
배열(생성과 초기화 /이차원배열/가변배열) 이해하기 (0) | 2019.03.13 |
---|---|
C#_기본 문법 (0) | 2019.03.07 |
C#_클래스 (0) | 2019.02.22 |
C#_ 제어문 (0) | 2019.02.21 |
C#_데이터형 (0) | 2019.02.14 |
댓글