[abstract]
abstract 한정자는 클래스, 메서드, 속성, 인덱서 및 이벤트에 사용할 수 있습니다. 클래스 선언에 abstract 한정자를 사용하면 해당 클래스가 다른 클래스의 기본 클래스로만 사용됨을 나타낸다. abstract로 표시된 멤버나 abstract 클래스에 포함된 멤버는 해당 abstract 클래스에서 파생되는 클래스에 의해 구현되어야 한다.
[event]
event 키워드는 게시자 클래스에서 이벤트를 선언하는 데 사용.
public class Publisher { // Declare the delegate (if using non-generic pattern). public delegate void SampleEventHandler(object sender, SampleEventArgs e);
// Declare the event. public event SampleEventHandler SampleEvent;
// Wrap the event in a protected virtual method // to enable derived classes to raise the event. protected virtual void RaiseSampleEvent() { // Raise the event by using the () operator. SampleEvent(this, new SampleEventArgs("Hello")); } } |
[extern]
extern 한정자는 외부에서 구현되는 메서드를 선언하는 데 사용된다. extern 한정자는 일반적으로 비관리 코드를 호출하기 위해 Interop 서비스를 사용할 때 DllImport 특성과 함께 사용된다. 이 경우 메서드는 다음 예제에서와 같이 static으로도 선언해야 한다.
using System; using System.Runtime.InteropServices; class MainClass { [DllImport("User32.dll")] public static extern int MessageBox(int h, string m, string c, int type);
static int Main() { string myString; Console.Write("Enter your message: "); myString = Console.ReadLine(); return MessageBox(0, myString, "My Message Box", 0); } } |
[sealed]
sealed 한정자는 클래스, 인스턴스, 메서드 및 속성에 적용할 수 있다. 봉인 클래스는 상속할 수 없다. 봉인 메서드는 기본 클래스의 메서드를 재정의하지만 이후의 파생 클래스에서는 봉인 메서드 자체를 재정의할 수 없다. 메서드나 속성에 sealed 한정자를 적용하는 경우 항상 override(C# 참조)를 함께 사용해야 한다.
using System; sealed class SealedClass { public int x; public int y; }
class MainClass { static void Main() { SealedClass sc = new SealedClass(); sc.x = 110; sc.y = 150; Console.WriteLine("x = {0}, y = {1}", sc.x, sc.y); } } |
[액서스한정자]
public: 액세스가 제한되지 않는다.
protected: 포함하는 클래스 또는 여기에서 파생된 형식으로 액세스가 된다.
Internal: 액세스가 현재 어셈블리로 된다.
protected internal: 현재 어셈블리 또는 포함하는 클래스에서 파생된 형식으로 액세스가 된다.
private: 액세스가 포함하는 형식으로 제한된다.