는이 전 다음 클래스가 있다고 가정하자 :선언하는 새로운 유형의
class Number{
}
내가 Number
유형의 변수를 선언 한 후 원하는, 그리고 그들에게 int
또는 uint
또는 변수의 모든 종류의 같은 값을 제공 :
Number n = 14;
나는 확실하지 않다,하지만 당신은 꼬마 도깨비를 만들 수 있습니다
는이 전 다음 클래스가 있다고 가정하자 :선언하는 새로운 유형의
class Number{
}
내가 Number
유형의 변수를 선언 한 후 원하는, 그리고 그들에게 int
또는 uint
또는 변수의 모든 종류의 같은 값을 제공 :
Number n = 14;
나는 확실하지 않다,하지만 당신은 꼬마 도깨비를 만들 수 있습니다
C#으로 새로운이기 때문에, 저를 도와주세요 이와 같은 경우를 처리하기 위해 변환 연산자를 사용합니다. 클래스에는 암시 적 변환 연산자가 호출하는 생성자가 필요합니다. 예를 들어 :
class Number
{
public int Value { get; set; }
public Number(int initialValue)
{
Value = initialValue;
}
public static implicit operator Number(int initialValue)
{
return new Number(initialValue);
}
}
, 행
Number n = 14;
당신은 너무 다른 방향으로 가고 클래스에 연산자를 추가 할 수 있습니다
Number n = new Number(14);
효과적으로 해당됩니다
public static implicit operator int(Number number)
{
if (number == null) {
// Or do something else (return 0, -1, whatever makes sense in the
// context of your application).
throw new ArgumentNullException("number");
}
return number.Value;
}
암시 적 연산자가있는을 조심하십시오. 그것들은 멋진 문법적 설탕이지만, 코드의 특정 덩어리에서 실제로 진행되고있는 것을 더 어렵게 만들 수도 있습니다. 또한 명시 적 연산자를 사용할 수도 있습니다. 명시 적 연산자는 호출하기 위해 타입 캐스트가 필요합니다.
당신은 대단합니다! 당신의 위대한 exaplanation 주셔서 감사합니다! – Victor
그리고 여전히 작은 수업이지만 거대한 수업이 될 것입니다. 내 계획은 무한 정밀도의 유형을 더 많은 작업을 '이중'으로 만들어야합니다. – Victor
확인. 값을 나타내는 경우 클래스 대신 구조체를 사용해야합니다. 클래스를 사용하면'Number m = n; '은'm'과'n'이 같은'Number' 객체를 가리키고 있음을 의미합니다. 구조체를 사용하면'Number m = n;'은'n'의 값을 새로운 인스턴스'm'에 복사합니다. 이것은 다른 기본 값 유형과 일치합니다. 구조체를 사용한다는 것은 또한 'Number' 형 변수가 null이 될 수 없음을 의미합니다. – cdhowie
implicit을보고 int에서 숫자 클래스로의 암시 적 변환을 만들고 싶습니다.
당신은 당신의 클래스의 연산자를 오버로드 할 수 있습니다
이class Number
{
public static Number operator=(int i)
{
...
}
}
BTW,이 같은 간단한 작은 클래스,이 구조체가 아닌 클래스를 사용하는 것이 좋습니다.
C#에서 대입 연산자를 오버로드 할 수 없습니다. – cdhowie
처음에는 같은 것을 생각했지만'='를 재정의 할 수는 없습니다. 대신 암시 적 변환을 사용해야합니다. [overloadable operators] 목록보기 (http://msdn.microsoft.com/en-US/library/8edha89s%28v=vs.80%29.aspx) –
정확히 원하는 것 - [방법 : 구조체간에 사용자 정의 변환 구현] (http://msdn.microsoft.com/en-us/library/zk2z37d3.aspx) –