제목별로 C# .Net은 암시 적 변환기를 제공합니까? 아니면 개발자가 정의한 유일한 암시 적 변환기입니까? 내가 생각C# .Net을 사용하여 암시 적으로 변환 된 변환기가 있습니까?
은 아마 다음과 같은 예를 들어, 좋은 사용 사례 했 :
var myObject = new object(); String myString = myObject;
은 또는, 사실, 대부분의 유형은 string
에 할당된다.
제목별로 C# .Net은 암시 적 변환기를 제공합니까? 아니면 개발자가 정의한 유일한 암시 적 변환기입니까? 내가 생각C# .Net을 사용하여 암시 적으로 변환 된 변환기가 있습니까?
은 아마 다음과 같은 예를 들어, 좋은 사용 사례 했 :
var myObject = new object(); String myString = myObject;
은 또는, 사실, 대부분의 유형은 string
에 할당된다.
이러한 자동 변환이 허용되지 않는 데에는 많은 이유가 있습니다 (처음에는 정보가 손실됩니다).
일반적으로 잘못된 일 (예 : 잘못된 과부하)을 쉽게 유발합니다. 이것은 "성공의 구덩이"에 반대합니다. 당신이 자유롭게 string
아무것도 변환 할 수있는 경우이의 예로서
는,이 항상 컴파일 타임과 런타임에서 일 것이다 :
입력을 처리 할 때GetIntOrZero
같은 기능은 종종 도우미로 존재
int GetIntOrZero(string value) {
Int32.TryParse(value, out int res);
return res;
}
var myObj = new MyType(args);
var count = GetIntOrZero(myObj);
, 그것을 임의의 객체에 적용하는 것은 의미가 없습니다.
음, 물론 몇 가지 분명한 사람이 있습니다 :
//object
//any_type -> object [note: one way]
object o = some_instance_of_a_type;
//numerics...
//int -> double [note: one way]
int i = 75;
double d = i;
//some more? there always are.
그럼에도 불구하고, 내가 자주 암시 아웃 - 오브 - 박스 변환의 사용에 대해 탄원하는 type safety의 인수를 제기하고 싶습니다.
답장에서 @ 리차드가 지적하는 바와 같이 일반적인/쉽게 만들어지는 실수에 대해 유형 안전이 당신을 보호합니다.
또 다른 예; int<->double
에서 암시 적 변환을 상상해보십시오. 그러면이 결과는 무엇입니까?
double d = 75.5;
int i = d;
d = i; //what would d be?
게다가 문자열에 대한 예제는 해당 작업에 맞게 특별히 설계된 많은 오버로드가 있다는 의미에서 의미가 있습니다.
예 : 명시 적 변환을 정의 할 필요가
string.Format("{0}", any_object_here);
//or
$"{any_object_here}";
그래서, 난 당신이 모두 최선을 얻을 것이다, 지금이 순간에, 말할 것입니다.
왜'.ToString()'이 (가)있을 때 암시 적 변환이 필요합니까? – svick