sealed 한정자는 클래스, 인스턴스, 메서드 및 속성에 적용할 수 있습니다
봉인 클래스는 상속할 수 없습니다. 봉인 메서드는 기본 클래스의 메서드를 재정의하지만 이후의 파생 클래스에서는 봉인 메서드 자체를 재정의할 수 없습니다. 메서드나 속성에 sealed 한정자를 적용하는 경우 항상 override(C# 참조)를 함께 사용해야 합니다.
봉인 클래스는 상속할 수 없습니다. 봉인 메서드는 기본 클래스의 메서드를 재정의하지만 이후의 파생 클래스에서는 봉인 메서드 자체를 재정의할 수 없습니다. 메서드나 속성에 sealed 한정자를 적용하는 경우 항상 override(C# 참조)를 함께 사용해야 합니다.
다음 예제와 같이 클래스 선언에 sealed 한정자를 사용하면 클래스가 상속되는 것을 방지할 수 있습니다.
sealed class SealedClass
{
public int x;
public int y;
}
{
public int x;
public int y;
}
*sealed Class*
sealed 한정자는 클래스의 상속, 메서드의 재정의를 막는다.
sealed 로 선언된 클래스를 다른 클래스가 상속받으려 하면 Error발생.
-보안 및 코드 설계 부분을 명확하게 하기 위해 사용.
-상업적인 코드 및 내부구현이 복잡해 파생 클래스에서 오버라이드하면 문제가 발생할 가능성이 있는
-코드를 사전에 차단할 용도로 사용
*sealed Method*
최상위 클래스에서 virtual로 정의된 메서드를 상속받는 클래스에서 sealed한정자로 override로 선언하게되면
그 클래스를 상속받는 클래스에서는 해당 메서드를 재정의 할 수 없다.
-파생 클래스에서 오버라이드 할 수 없다.
-sealed 메서드는 꼭 override앞에서만 사용할 수 있다.
-sealed를 쓰면 상속을 줄 수 없으므로 하위 클래스에서 재정의 불가능
sealed 한정자는 클래스의 상속, 메서드의 재정의를 막는다.
sealed 로 선언된 클래스를 다른 클래스가 상속받으려 하면 Error발생.
-보안 및 코드 설계 부분을 명확하게 하기 위해 사용.
-상업적인 코드 및 내부구현이 복잡해 파생 클래스에서 오버라이드하면 문제가 발생할 가능성이 있는
-코드를 사전에 차단할 용도로 사용
*sealed Method*
최상위 클래스에서 virtual로 정의된 메서드를 상속받는 클래스에서 sealed한정자로 override로 선언하게되면
그 클래스를 상속받는 클래스에서는 해당 메서드를 재정의 할 수 없다.
-파생 클래스에서 오버라이드 할 수 없다.
-sealed 메서드는 꼭 override앞에서만 사용할 수 있다.
-sealed를 쓰면 상속을 줄 수 없으므로 하위 클래스에서 재정의 불가능
'Sunmoon_BIT > C#' 카테고리의 다른 글
Visual Studio2008 유용한단축키 (0) | 2010.04.03 |
---|---|
Visual Studio 2008 자동 줄맞춤 (0) | 2010.04.03 |
Effective C# (0) | 2010.04.01 |
Deligate [대리자] (0) | 2010.03.26 |
연산자 오버로딩 (0) | 2010.03.26 |
- 같은 형태의 함수를 대신하여 호출하는 대리자
- 같은 형태의 함수를 '+'연산으로 추가하여 대리자를 호출하면 포함된 모든 함수가 호출된다.
ex)
public void Study(int cnt)
{
public void Study(int cnt)
{
Console.WriteLine("학습전");
Console.WriteLine("this.ToString());
iq += cnt;
Console.WriteLine("tcnt.ToString() + "시간 학습 후");
Console.WriteLine("this.ToString());\
}
public void Play(int cnt)
{
public void Play(int cnt)
{
Console.WriteLine("운동전");
Console.WriteLine("this.ToString());
Hp += cnt;
Console.WriteLine("tcnt.ToString() + "시간 운동 후");
Console.WriteLine("this.ToString());\
}
delegaate void EducationDele(int cnt); //void형을 리턴하고 인자가 int형인 함수의 대리자
EducationDele del1 = new EducationDele(Stu.Study);
del1(4); //Study함수에 4를 넣어 호출한 것과 같은 결과출력
EducationDele del2 = new EducationDele(Stu.Play);
del2.Invoke(5); //Play함수에 4를 넣어 호출한 것과 같은 결과출력
EducationDele del3 = del1 + del2;
del3(10); //Play함수와 Study함수에 10를 넣어 호출한 것과 같은 결과출력..한번의 호출로 2개의 함수호출
delegaate void EducationDele(int cnt); //void형을 리턴하고 인자가 int형인 함수의 대리자
EducationDele del1 = new EducationDele(Stu.Study);
del1(4); //Study함수에 4를 넣어 호출한 것과 같은 결과출력
EducationDele del2 = new EducationDele(Stu.Play);
del2.Invoke(5); //Play함수에 4를 넣어 호출한 것과 같은 결과출력
EducationDele del3 = del1 + del2;
del3(10); //Play함수와 Study함수에 10를 넣어 호출한 것과 같은 결과출력..한번의 호출로 2개의 함수호출
ILDASM을 사용하여 디버그된 실행파일을 보면
Study를 통해 위임받은 Delegate가 내부적으로 Invoke메소드를 호출.(컴파일러가 작성)
del3은 Combine메소드로 Delegate 2개를 결합한다.
Study를 통해 위임받은 Delegate가 내부적으로 Invoke메소드를 호출.(컴파일러가 작성)
del3은 Combine메소드로 Delegate 2개를 결합한다.
BeginInvoke(인자,AsyncCallback,AsynCallback에 넘길 Delegate)
AsyncCallback
리턴형 : void
인자 : IAsyncResult iar
입력한 인자를 얻어오기 : iar.AsyncState ->형식변환이 필요.
ex>EducationDele dele = iar.AsyncState as EducationDele;
if(dele != null) // 정상적으로 얻어왔으면 null이 아니다
{
dele.EndInvoke(iar);
}
Console.WriteLine("교육끝");
AsyncCallback
리턴형 : void
인자 : IAsyncResult iar
입력한 인자를 얻어오기 : iar.AsyncState ->형식변환이 필요.
ex>EducationDele dele = iar.AsyncState as EducationDele;
if(dele != null) // 정상적으로 얻어왔으면 null이 아니다
{
dele.EndInvoke(iar);
}
Console.WriteLine("교육끝");
헷갈린다 마지막....정리미완성
'Sunmoon_BIT > C#' 카테고리의 다른 글
Visual Studio2008 유용한단축키 (0) | 2010.04.03 |
---|---|
Visual Studio 2008 자동 줄맞춤 (0) | 2010.04.03 |
Effective C# (0) | 2010.04.01 |
Sealed Class , Sealed Method (0) | 2010.03.29 |
연산자 오버로딩 (0) | 2010.03.26 |
public static <리턴타입> operator <연산자>(<인자리스트>)
{
{
//구문들
}
예제)
public static Complex operator +(Complex1,Complex2)
{
Complex temp = new Complex();
temp.x = c1.x+c2.y;
temp.y = c1.y+c2.y;
return temp;
}
->x,y의 데이터를 갖는 Complex 객체를 2개 인자로 받아 두개의 x값과 y값을 더한 새로운
Complex객체를 만들어서 리턴한다
'Sunmoon_BIT > C#' 카테고리의 다른 글
Visual Studio2008 유용한단축키 (0) | 2010.04.03 |
---|---|
Visual Studio 2008 자동 줄맞춤 (0) | 2010.04.03 |
Effective C# (0) | 2010.04.01 |
Sealed Class , Sealed Method (0) | 2010.03.29 |
Deligate [대리자] (0) | 2010.03.26 |