>  기사  >  백엔드 개발  >  C#에서 봉인된 키워드의 역할에 대한 자세한 설명

C#에서 봉인된 키워드의 역할에 대한 자세한 설명

伊谢尔伦
伊谢尔伦원래의
2017-04-29 14:43:362083검색

중국어로 봉인됨(Sealed)은 봉인됨을 의미하므로, 이름에서 수정된 클래스나 메서드는 상속되거나 재정의될 수 없음을 나타냅니다.

sealed 키워드의 역할:
클래스 선언에 sealing을 사용하면 다른 클래스가 이 클래스를 상속하는 것을 방지할 수 있습니다. 메서드 선언에 sealing 수정자를 사용하면 확장 클래스가 이를 재정의하는 것을 방지할 수 있습니다. 수업방식.
Sealed 수정자는 의도하지 않은 파생을 방지하는 데 주로 사용되지만 특정 런타임 최적화를 촉진할 수도 있습니다. 특히 봉인된 클래스에는 파생 클래스가 없으므로 봉인된 클래스 인스턴스의 가상 함수 멤버에 대한 호출은 처리를 위해 비가상 호출로 변환될 수 있습니다.
봉인 클래스:
봉인 클래스는 클래스가 다른 클래스에서 상속되는 것을 방지하기 위해 선언에 봉인 수정자를 사용합니다. 봉인된 클래스를 다른 클래스의 기본 클래스로 사용하려고 하면 C#에서 오류 메시지가 표시됩니다. 물론 봉인된 클래스는 동시에 추상 클래스일 수 없습니다. 추상화는 항상 상속되기를 원하기 때문입니다.
씰은 어떤 상황에서 사용되나요? 실제로 봉인된 클래스 내에 파생 클래스를 갖는 것은 불가능합니다. 봉인된 클래스 인스턴스에 가상 멤버 함수가 있는 경우 멤버 함수는 비가상으로 변환될 수 있으며 함수 한정자 virtual은 더 이상 적용되지 않습니다.
다음 예를 살펴보겠습니다.

abstract class AbstractClass 
{ 
public abstract void Method( ) ; 
} 
sealed class SealedClass: AbstractClass 
{ 
public override void Method( ) 
{ //... } 
}



다음 코드를 작성하려고 하면
class OtherClass: SealedClass
{
}

C#은 이 오류를 지적하고 SealedClass가 봉인된 클래스이므로 SealedClass에서 어떤 클래스도 파생시키려고 시도할 수 없음을 알려줍니다.
봉인된 메서드:
C#에서는 메서드가 위치한 클래스의 파생 클래스에서 해당 메서드가 오버로드되는 것을 방지하기 위해 봉인된 메서드(sealedmethod)라는 개념도 제안합니다. 메소드에 봉인된 수정자를 사용할 수 있으며, 그런 다음 해당 메소드를 봉인된 메소드라고 부릅니다.
클래스의 모든 멤버 메서드를 봉인된 메서드로 사용할 수 있는 것은 아닙니다. 봉인된 메서드로 사용하려면 기본 클래스의 가상 메서드를 오버로드하고 특정 구현 메서드를 제공해야 합니다. 따라서 메서드 선언에서 봉인된 수정자는 항상 재정의 수정자와 함께 사용됩니다. 다음 예제 코드를 살펴보십시오.

using System ; 
class A 
{ 
public virtual void F( ) 
{ 
Console.WriteLine("A.F") ; 
} 
public virtual void G( ) 
{ 
Console.WriteLine("A.G") ; 
} 
} 
class B: A 
{ 
sealed override public void F( ) 
{ 
Console.WriteLine("B.F") ; 
} 
override public void G( ) 
{ 
Console.WriteLine("B.G") ; } 
} 
class C: B 
{ 
override public void G( ) 
{ 
Console.WriteLine("C.G") ; 
} 
}


클래스 B는 기본 클래스 A의 두 가상 메서드를 모두 오버로드합니다. 메서드 F는 봉인된 수정자를 사용하여 봉인된 메서드가 됩니다. G 메소드는 봉인된 메소드가 아니므로 B의 파생 클래스 C에서 메소드 G는 오버로드될 수 있지만 메소드 F는 오버로드될 수 없습니다

위 내용은 C#에서 봉인된 키워드의 역할에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.