2017-11-19 17 views
4

제목별로 C# .Net은 암시 적 변환기를 제공합니까? 아니면 개발자가 정의한 유일한 암시 적 변환기입니까? 내가 생각C# .Net을 사용하여 암시 적으로 변환 된 변환기가 있습니까?

은 아마 다음과 같은 예를 들어, 좋은 사용 사례 했 :

var myObject = new object(); String myString = myObject;

은 또는, 사실, 대부분의 유형은 string에 할당된다.

+0

왜'.ToString()'이 (가)있을 때 암시 적 변환이 필요합니까? – svick

답변

7

이러한 자동 변환이 허용되지 않는 데에는 많은 이유가 있습니다 (처음에는 정보가 손실됩니다).

일반적으로 잘못된 일 (예 : 잘못된 과부하)을 쉽게 유발합니다. 이것은 "성공의 구덩이"에 반대합니다. 당신이 자유롭게 string 아무것도 변환 할 수있는 경우이의 예로서

는,이 항상 컴파일 타임과 런타임에서 일 것이다 :

입력을 처리 할 때 GetIntOrZero 같은 기능은 종종 도우미로 존재
int GetIntOrZero(string value) { 
    Int32.TryParse(value, out int res); 
    return res; 
} 

var myObj = new MyType(args); 
var count = GetIntOrZero(myObj); 

, 그것을 임의의 객체에 적용하는 것은 의미가 없습니다.

2

음, 물론 몇 가지 분명한 사람이 있습니다 :

//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}"; 

그래서, 난 당신이 모두 최선을 얻을 것이다, 지금이 순간에, 말할 것입니다.