C #의 문자열과 문자열의 차이점은 무엇입니까?
질문
예제 (사례 참고) :
string s = "Hello world!";
String s = "Hello world!";
각각의 사용 지침은 무엇입니까?그리고 차이점은 무엇입니까?
답변
String은 System.String에 대해 C #의 별칭입니다. 그래서 기술적으로 차이가 없습니다.int vs. system.int32와 같습니다.
지침에 따라 일반적으로 객체를 참조 할 때마다 문자열을 사용하는 것이 좋습니다.
예를 들어,
string place = "world";
마찬가지로 클래스를 구체적으로 참조 해야하는 경우 문자열을 사용하는 것이 일반적으로 사용하는 것이 좋습니다.
예를 들어,
string greet = String.Format("Hello {0}!", place);
이것은 Microsoft가 예제에서 사용하는 경향이있는 스타일입니다.
StyleCop이 C # 특정 별명의 사용을 적용함에 따라이 영역의 안내가 변경되었을 수 있습니다.
답변
완전성을 위해서, 여기에는 관련 정보의 뇌 덤프가 있습니다 ...
다른 사람들이지지했듯이 String은 System.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
문자열 및 객체 외에는 별칭이 모두 값 유형에 있습니다.십진수는 값 유형이지만 CLR의 기본 유형은 아닙니다.별칭이없는 유일한 기본 유형은 system.intptr입니다.
사양에서 값 유형 별칭은 "간단한 유형"이라고합니다.리터럴은 모든 간단한 유형의 일정한 값에 사용할 수 있습니다.다른 값 유형에는 리터럴 양식이있는 경우가 없습니다.(DateTime 리터럴을 허용하는 VB와 비교하십시오.
별칭을 사용해야하는 하나의 상황이 있습니다. 열거 형의 기본 유형을 명시 적으로 지정할 때.예를 들어:
public enum Foo : UInt32 {} // Invalid
public enum Bar : uint {} // Valid
그것은 단지 사양이 enum 선언을 정의하는 방식 일뿐입니다. 결장 후에는 SBYTE, 바이트, 짧은, USHORT, int, uint, long, ulong, char의 하나의 토큰 인 필수형 유형 생산이되어야합니다.... 예를 들어 가변 선언에 의해 사용되는 유형의 생산과는 반대로다른 차이를 나타내지는 않습니다.
마지막으로, 사용하기에 관해서 : 개인적으로 구현을 위해 모든 곳에서 별칭을 사용하지만 모든 API의 CLR 유형.그것은 실제로 구현 측면에서 사용하는 것이 너무 많이 중요하지 않습니다. 팀 간의 일관성이 좋지만 다른 사람은 신경 써야합니다.반면에 API의 유형을 참조하면 언어 중립적 인 방법으로 그렇게하는 것이 진정으로 중요합니다.Readint32라는 메소드는 모호하지 않지만 Readint 호출 된 메소드는 해석이 필요합니다.호출자는 int16의 int 별명을 정의하는 언어를 사용할 수 있습니다..NET Framework Designer는이 패턴, 비트 컨버터, BinaryReader 및 Convert 클래스에있는이 패턴을 따랐습니다.
답변
String System.String의 경우 .NET Framework 유형입니다.String은 System.String의 C # 언어의 별칭입니다.둘 다 IL (중급 언어)에서 시스템을 체계로 컴파일하므로 차이가 없습니다.원하는 것을 선택하고 사용하십시오.C #에서 코드를 코드화하면 C # 유형 별칭이고 C # 프로그래머가 잘 알려진 문자열을 선호합니다.
나는 (int, system.int32) 등에 대해 똑같이 말할 수 있습니다.
답변
C #에서 제공된 유형 별칭을 사용하는 것에 대해 들어 본 적이있는 가장 좋은 답변은 C #을 통해 책 CLR의 Jeffrey Richter에서 비롯됩니다.다음은 그의 3 가지 이유가 있습니다.
코드에서 문자열이나 문자열을 사용할지 여부를 알지 못하고 개발자가 혼란스러워 보였습니다. C #에서 문자열 (키워드)은 System.String (FCL 유형)에 정확히 맵되기 때문에 차이가 없으며 사용할 수 있습니다. C #에서 System.INT64에 대한 긴지도에서는 다른 프로그래밍 언어에서 LONG는 INT16 또는 Int32에 맵핑 될 수 있습니다. 실제로 C ++ / CLI는 실제로 Int32로 오랫동안 치료합니다. 한 언어로 소스 코드를 읽는 사람은 다른 프로그래밍 언어로 프로그래밍하는 데 사용되는 경우 코드의 의도를 쉽게 잘못 해석 할 수 있습니다. 사실 대부분의 언어는 키워드로 오래 걸리지 않으며이를 사용하는 코드를 컴파일하지 않습니다. FCL에는 메소드 이름의 일부로 유형 이름이있는 많은 메소드가 있습니다. 예를 들어, BinaryReader 유형은 ReadBoolean, Readint32, Readsingle 등과 같은 방법을 제공하고 System.Convert 유형은 Toboolean, ToInt32, Toingle 등과 같은 방법을 제공합니다. 다음 코드를 작성하는 것은 합법적이지만, 플로트 라인이 나에게 매우 부자연스러운 느낌이 들고 라인이 정확하다는 것이 분명하지 않습니다.
BinaryReader br = new BinaryReader(...);
float val = br.ReadSingle(); // OK, but feels unnatural
Single val = br.ReadSingle(); // OK and feels good
그래서 거기에 있습니다.나는 이것들이 모두 정말로 좋은 점이라고 생각한다.그러나 내 코드에서 Jeffrey의 조언을 사용하여 자신을 찾지 못합니다.어쩌면 나는 내 C # 세계에 너무 갇혀 있지만 코드를 프레임 워크 코드처럼 보이게하려고 노력하는 것입니다.
답변
문자열은 예약어이지만 문자열은 단지 클래스 이름입니다. 즉, 문자열을 변수 이름으로 사용할 수 없음을 의미합니다.
어떤 이유로 문자열이라는 변수가 원하는 경우 다음과 같은 컴파일만이 표시됩니다.
StringBuilder String = new StringBuilder(); // compiles
StringBuilder string = new StringBuilder(); // doesn't compile
문자열이라는 변수 이름을 실제로 원한다면 @ a prefix로 사용할 수 있습니다.
StringBuilder @string = new StringBuilder();
또 다른 중요한 차이 : 스택 오버플로는이를 다르게 강조합니다.
답변
한 차이가 있습니다. 시스템을 사용하지 않고 문자열을 사용할 수 없습니다.미리.
출처:https://stackoverflow.com/questions/7074/what-is-the-difference-between-string-and-string-in-c
최근댓글