완벽을 기하기 위해 여기에 관련된 정보의 두뇌 덤프가 있습니다 ...
다른 사람들이 지적했듯이 string
의 별칭입니다 System.String
. 그것들은 동일한 코드로 컴파일되므로 실행 시간에는 아무런 차이가 없습니다. 이것은 C #의 별칭 중 하나 일뿐입니다. 전체 목록은 다음과 같습니다.
object: System.Object
string: System.String
bool: System.Boolean
byte: System.Byte
sbyte: System.SByte
short: System.Int16
ushort: System.UInt16
int: System.Int32
uint: System.UInt32
long: System.Int64
ulong: System.UInt64
float: System.Single
double: System.Double
decimal: System.Decimal
char: System.Char
그렇다에서 string
하고 object
, 별칭은 값 유형에 대한 모든입니다. decimal
CLR의 기본 유형이 아닌 값 유형입니다. 별칭이없는 유일한 기본 유형은 System.IntPtr
입니다.
사양에서 값 형식 별칭은 "단순 형식"이라고합니다. 리터럴은 모든 단순 유형의 상수 값에 사용될 수 있습니다. 다른 값 유형에는 리터럴 양식을 사용할 수 없습니다. (VB와 비교하면 DateTime
리터럴 을 허용 하고 별칭도 있습니다.)
당신이하는 하나의 상황이 이 명시 적으로 열거의 기본 형식을 지정하는 경우 : 별칭을 사용하는가. 예를 들어 :
public enum Foo : UInt32 {} // Invalid
public enum Bar : uint {} // Valid
즉, 방법의 문제 스펙을 정의 열거 선언입니다 - 콜론 뒤 부분이되어야합니다 필수 유형 중 하나 토큰 생산, sbyte
, byte
, short
, ushort
, int
, uint
, long
, ulong
, char
... A와 반대되는 유형의 생산 등을 예를 들어 변수 선언에 사용됩니다. 다른 차이점은 없습니다.
마지막으로, 사용할 때 : 개인적으로 구현의 모든 곳에서 별칭을 사용하지만 API의 경우 CLR 유형을 사용합니다. 구현 측면에서 어느 것을 사용하는지는 실제로 중요하지 않습니다. 팀 간의 일관성은 좋지만 아무도 신경 쓰지 않을 것입니다. 반면에 API에서 유형을 참조하는 경우 언어 중립적 인 방식으로 수행하는 것이 중요합니다. 호출되는 메소드 ReadInt32
는 모호하지 않지만 호출 된 메소드 ReadInt
는 해석이 필요합니다. 예를 들어, 발신자는에 대한 int
별칭을 정의하는 언어를 사용할 수 있습니다 Int16
. 닷넷 프레임 워크의 디자이너는이 패턴을 따랐다 좋은 예는에있는 BitConverter
, BinaryReader
그리고 Convert
클래스.
string
A는 어휘 는 C # 1의 구조 문법 반면System.String
단지 타입이다. 어떤 사양에서 언급 된 명백한 차이에 관계없이 , 이러한 모호한 차이가 여전히 모호하게 적용될 수 있습니다. 언어 자체 는string
구현이 BCL의 특정 클래스에 대해 고려할 의무가없는 방식으로 지원 해야합니다 .