C# 식별자 명명 규칙 및 관례
식별자은 형식(클래스, 인터페이스, 구조체, 대리자 또는 열거형), 멤버, 변수 또는 네임스페이스에 여러분이 부여하는 이름입니다.
명명 규칙
유효한 식별자는 다음 규칙을 따라야 합니다. C# 컴파일러는 다음 규칙을 따르지 않는 식별자에 대한 오류를 생성합니다.
- 식별자는 문자 또는 밑줄(
_
)로 시작해야 합니다. - 식별자는 유니코드 문자 문자, 10진수 문자, 유니코드 연결 문자, 유니코드 결합 문자 또는 유니코드 서식 문자를 포함할 수 있습니다. 유니코드 범주에 대한 자세한 내용은 유니코드 범주 데이터베이스참조하세요.
식별자의 @
접두사를 사용하여 C# 키워드와 일치하는 식별자를 선언할 수 있습니다.
@
식별자 이름의 일부가 아닙니다. 예를 들어, @if
는 if
이라는 식별자를 선언합니다. 이러한
유효한 식별자에 대한 전체 정의는 C# 언어 사양
중요하다
C# 언어 사양 문자(Lu, Ll, Lt, Lm 또는 Nl), 숫자(Nd), 연결(PC), 결합(Mn 또는 Mc), 서식(Cf) 범주만 허용합니다. 그 외 모든 항목은 _
을 사용하여 자동으로 대체됩니다. 이는 특정 유니코드 문자에 영향을 미칠 수 있습니다.
명명 규칙
규칙 외에도 식별자 이름에 대한 규칙이 .NET API 전체에서 사용됩니다. 이러한 규칙은 이름에 일관성을 제공하지만 컴파일러는 이를 적용하지 않습니다. 프로젝트에서 다양한 규칙을 자유롭게 사용할 수 있습니다.
규칙에 따라 C# 프로그램은 형식 이름, 네임스페이스 및 모든 공용 멤버에 PascalCase
사용합니다. 또한 dotnet/docs
팀은 .NET 런타임 팀의 코딩 스타일채택된 다음 규칙을 사용합니다.
인터페이스 이름은 대문자
I
시작합니다.특성 형식은
Attribute
단어로 끝납니다.열거형은 플래그가 아닌 경우 단수 명사를 사용하고, 플래그인 경우 복수 명사를 사용합니다.
식별자에는 두 개의 연속 밑줄(
_
) 문자가 포함되어서는 안 됩니다. 이러한 이름은 컴파일러에서 생성된 식별자를 위해 예약됩니다.변수, 메서드 및 클래스에 의미 있고 설명이 포함된 이름을 사용합니다.
간결성보다 선명도를 선호합니다.
클래스 이름 및 메서드 이름에 PascalCase를 사용합니다.
메서드 매개 변수 및 지역 변수에 camelCase를 사용합니다.
필드와 로컬 상수 모두의 상수 이름에 PascalCase를 사용합니다.
프라이빗 인스턴스 필드는 밑줄(
_
)로 시작하고 나머지 텍스트는 camelCased입니다.정적 필드는
s_
으로 시작합니다. 이 규칙은 기본 Visual Studio 동작이나Framework 디자인 지침 의 일부가 아니지만, editorconfig에서구성할 수 있습니다. 널리 알려지고 허용되는 약어나 두문자어를 제외하고 이름에 이를 사용하지 마십시오.
역방향 도메인 이름 표기법을 따르는 의미 있고 설명이 포함된 네임스페이스를 사용합니다.
어셈블리의 기본 용도를 나타내는 어셈블리 이름을 선택합니다.
단순 루프 카운터를 제외하고 단일 문자 이름을 사용하지 마세요. 또한 C# 구문의 구문을 설명하는 구문 예제에서는 C# 언어 사양사용되는 규칙과 일치하는 다음 단일 문자 이름을 사용하는 경우가 많습니다. 구문 예제는 규칙에 대한 예외입니다.
- 구조체에
S
사용하고 클래스의 경우C
사용합니다. - 메서드에
M
사용합니다. - 변수에는
v
, 매개 변수에는p
사용합니다. -
r
을(를)ref
매개 변수에 사용합니다.
- 구조체에
팁
다음 예제에서 public
표시된 요소와 관련된 지침은 protected
및 protected internal
요소로 작업할 때도 적용할 수 있으며, 모두 외부 호출자에게 표시되도록 되어 있습니다.
파스칼 케이스
class
, interface
, struct
또는 delegate
형식에 이름을 지정할 때 파스칼 대/소문자법("PascalCasing")을 사용합니다.
public class DataService
{
}
public record PhysicalAddress(
string Street,
string City,
string StateOrProvince,
string ZipCode);
public struct ValueCoordinate
{
}
public delegate void DelegateType(string message);
interface
의 이름을 지정할 때, 이름 앞에 I
접두사를 붙이는 것 외에 파스칼 표기법을 사용하십시오. 이 접두사는 소비자에게 그것이 interface
이라는 것을 분명하게 나타냅니다.
public interface IWorkerQueue
{
}
필드, 속성, 이벤트와 같은 형식의 멤버에 public
이름을 지정할 때는 파스칼 대/소문자 구분을 사용합니다. 또한 모든 메서드 및 로컬 함수에 대해 파스칼 표기법을 사용합니다.
public class ExampleEvents
{
// A public field, these should be used sparingly
public bool IsValid;
// An init-only property
public IWorkerQueue WorkerQueue { get; init; }
// An event
public event Action EventProcessing;
// Method
public void StartEventProcessing()
{
// Local function
static int CountQueueItems() => WorkerQueue.Count;
// ...
}
}
위치 레코드를 작성할 때는 레코드의 공용 속성인 매개 변수에 파스칼 케이싱(단어의 첫 글자를 대문자로 사용)을 사용합니다.
public record PhysicalAddress(
string Street,
string City,
string StateOrProvince,
string ZipCode);
위치 레코드에 대한 자세한 내용은 속성 정의를 위한 위치 구문을 참조하세요.
카멜 케이스
private
또는 internal
필드의 이름을 지정할 때는 카멜케이스("camelCasing")를 사용하고, _
를 접두사로 붙입니다. 지역 변수의 이름을 지정할 때, 대리자 형식의 인스턴스를 포함하여 카멜 표기법을 사용합니다.
public class DataService
{
private IWorkerQueue _workerQueue;
}
팁
문 완성을 지원하는 IDE에서 이러한 명명 규칙을 따르는 C# 코드를 편집할 때 _
입력하면 개체 범위 멤버가 모두 표시됩니다.
private
또는 internal
static
필드를 사용할 때는 s_
접두사를 사용하고, 스레드 정적을 위해서는 t_
를 사용하십시오.
public class DataService
{
private static IWorkerQueue s_workerQueue;
[ThreadStatic]
private static TimeSpan t_timeSpan;
}
메서드 매개변수를 작성할 때 앞 글자를 대문자로 표기하는 camelCase 방식(카멜 케이싱)을 사용합니다.
public T SomeMethod<T>(int someNumber, bool isValid)
{
}
C# 명명 규칙에 대한 자세한 내용은 .NET 런타임 팀의 코딩 스타일참조하세요.
형식 매개 변수 명명 지침
다음 지침은 제네릭 형식 매개 변수의 형식 매개 변수에 적용됩니다. 형식 매개 변수는 제네릭 형식 또는 제네릭 메서드의 인수에 대한 자리 표시자입니다. C# 프로그래밍 가이드에서
단일 문자 이름이 완전히 설명적이라서 설명이 포함된 이름이 가치가 없다면, 제네릭 형식 매개 변수의 이름을 설명적인 이름으로 지정하십시오.
public interface ISessionChannel<TSession> { /*...*/ } public delegate TOutput Converter<TInput, TOutput>(TInput from); public class List<T> { /*...*/ }
형식에 단일 문자 형식 매개 변수가 있을 경우, 형식 매개 변수 이름으로 사용을
T
고려합니다.public int IComparer<T>() { return 0; } public delegate bool Predicate<T>(T item); public struct Nullable<T> where T : struct { /*...*/ }
"T"로 설명 유형 매개 변수 이름을 접두사로 붙이십시오.
public interface ISessionChannel<TSession> { TSession Session { get; } }
매개 변수 이름에서 형식 매개 변수에 배치된 제약 조건을 나타내는 고려합니다. 예를 들어,
ISession
으로 제한된 매개 변수를TSession
이라고 부를 수 있습니다.
CA1715
추가 명명 규칙
지시문사용하는
포함하지 않는 예제는 네임스페이스 한정을 사용합니다. 네임스페이스가 프로젝트에서 기본적으로 가져오기 설정되어 있는 경우, 해당 네임스페이스의 이름을 완전히 명시할 필요가 없습니다. 다음 예제와 같이 한 줄에 너무 길면 점(.) 다음에 정규화된 이름이 끊어질 수 있습니다. var currentPerformanceCounterCategory = new System.Diagnostics. PerformanceCounterCategory();
Visual Studio 디자이너 도구를 사용하여 만든 개체의 이름을 다른 지침에 맞게 변경할 필요가 없습니다.
.NET