가 난 그냥 최근 답변 중 하나를 사용하고 있었다 보았다?암시 운영자
암시 운영자
답변
암시 적은 변환시 코드에 캐스트가 필요 없음을 의미합니다.
이제이 작업을 수행 할 수 있습니다
Savepoint point = new Savepoint();
if(point) // becomes a bool using your operator
{
}
를 대신이 작업을 수행 할 필요없이이 유용한 구별이 숫자 유형입니다 이유
Savepoint point = new Savepoint();
if((bool)point) // an "explicit" conversion
{
}
한 예입니다.
float f = 6.5;
double d = f; // implicit conversion
그러나 사용자를 강제로 만 명시 적 변환이 그래서 작은 종류의 큰 종류를 변환하는 것은 위험 할 수 있습니다 정말 그 것을 명확히하기 : 암시 적 변환은 예를 "큰"유형, "작은"유형에서있다 문제의 작업을 수행하려고합니다 :
long l = 20;
// short s = l;
short s = (short)l; // explicit conversion
그냥 mquander의 답변에 추가 할 수 있습니다. 는 C# 3.0 언어 사양에서
:는 사용자 정의 암시 변환 도입
implicit
키워드를 포함하는 변환 연산자 선언. 암시 적 변환은 다양한 상황에서 , 함수 멤버 호출을 포함하는 , 캐스트 표현식 및 할당을 등 다양한 상황에서 발생할 수 있습니다.
(섹션 10.10.3)
또한 명시 적으로 운영이 있기 때문에 '암시'를 지정해야합니다.
이것은 부울과 저장 점 간의 변환이 암시 적으로 수행 될 수 있음을 의미합니다. = 숨김.
Savepoint s = new Savepoint();
bool b = s;
명시 적 변환 분명히, 이러한 방법을 수행 할 수없는 데이터 손실이없는 경우
Savepoint s = new Savepoint();
bool b = (bool)s;
암시 적 변환이 자주 즉 Int16 (short)
Int32 (int)
에 사용된다. 그러나 가능하다면 명시 적 변환을 사용하여 '동의'해야합니다. 예를 들어, 귀하의 경우에는
, Savepoint
경우 단지
struct Savepoint
{
public bool data;
}
데이터 손실이 가능하지 않기 때문에 당신이 암시 적 변환을 사용할 수 있습니다 그렇지 않으면
Savepoint s = new Savepoint();
s.data = true;
bool b = s;
난 당신이 명시 적으로 정의하는 것이 좋습니다 운영자!
암시 적 연산자의 오용과 같습니다. Savepoint 클래스가하는 일을 모르지만, 부울로 변환하는 것은 논리적으로 보이지 않습니다.
if (point) {
대신 : 암시 적 연산자는 세이브 포인트 참조가 null인지 아닌지 단순히 참조 평가하여 확인할 수 있습니다 그것은 그런 식으로 사용되는 경우
if (point != null) {
을, 그 숨어있는 어떤 코드 실제로하고 있고, 그것은 거의 C#에 관한 모든 것에 반대합니다.
이것은 완전히 맞습니다. – mquander
변환 연산자는 한 유형에서 다른 유형으로 변환합니다. 암시 적은 변환을 위해 코드에 명시 적 형변환을 입력 할 필요가 없음을 의미합니다. 명시 적으로 코드에서 캐스트를 호출해야합니다.
변환으로 인해 데이터가 손실되지 않는다는 것을 확신 할 때 암시 적 변환 연산자를 사용합니다. 예를 들어, 변환을 넓히는 경우 (int -> long, float -> double). 명시 적 변환 연산자는 일부 상태가 손실되거나 컴파일러가 모든 곳에서 변환을 삽입하여 클라이언트 코드를 자동으로 고사하고 싶지 않을 때 사용됩니다.
이 변환을 수행하는 것이 바람직하지 않기 때문에 사용자의 변환과 같은 혼란이 실제로 발생합니다.
- 1. 운영자
- 2. 자바 = 운영자
- 3. 파이썬 운영자
- 4. Linq에이 작품을 잘 운영자
- 5. 이상한 자바 스크립트 운영자
- 6. 옵션`new` 운영자
- 7. 루비 재정은 운영자
- 8. C에 대한 질문! 운영자
- 9. 과부하! 운영자 루비
- 10. 재귀 문제 과부하 운영자
- 11. 는 ++ (운영자 문제
- 12. 문자를 이스케이프하는 방법 '.' 운영자 %
- 13. Mongo $ in 운영자 성능
- 14. VB와 동일한 C#? 운영자
- 15. C#을 요구하는 운영자
- 16. C++ 운영자 오류
- 17. PHP 정규식 또는 | 운영자
- 18. ? 운영자 VS ?? 연산자 사용법
- 19. 파이썬의 불일치 플러스 운영자
- 20. Android 앱으로 네트워크 운영자 변경
- 21. 루비 줄 바꿈 및 운영자
- 22. 프로토 타입 라이브러리 사용! 운영자
- 23. 자바 스크립트에서 초기화 객체는 || 운영자
- 24. ~와!의 차이점은 무엇입니까? 운영자?
- 25. ABC 가상 ostream에 삽입 운영자
- 26. VB 또는 운영자 INT32와 INT
- 27. Perl Less '<'운영자 질문
- 28. Ruby는 C#과 같습니다. ?? 운영자
- 29. 네트워크 운영자 이름을 알고 있습니다.
- 30. 는 할 수는 조건 연산자는 암시 적으로 ...
당신은 노골적인 숫자 캐스팅에 당신의 단어가 섞여 있습니다. "더 작은 유형을 더 큰 유형으로 변환"하는 것은 그 반대의 방향이어야합니다. – Samuel
감사합니다. 나는 내 실수를 고쳤다. – mquander
float가 double보다 작습니까? – configurator