2012-10-24 2 views
1

는이 전 다음 클래스가 있다고 가정하자 :선언하는 새로운 유형의

class Number{ 

} 

내가 Number 유형의 변수를 선언 한 후 원하는, 그리고 그들에게 int 또는 uint 또는 변수의 모든 종류의 같은 값을 제공 :

내 질문이 좋은 경우
Number n = 14; 

나는 확실하지 않다,하지만 당신은 꼬마 도깨비를 만들 수 있습니다

+0

정확히 원하는 것 - [방법 : 구조체간에 사용자 정의 변환 구현] (http://msdn.microsoft.com/en-us/library/zk2z37d3.aspx) –

답변

7

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

암시 적 연산자가있는을 조심하십시오. 그것들은 멋진 문법적 설탕이지만, 코드의 특정 덩어리에서 실제로 진행되고있는 것을 더 어렵게 만들 수도 있습니다. 또한 명시 적 연산자를 사용할 수도 있습니다. 명시 적 연산자는 호출하기 위해 타입 캐스트가 필요합니다.

+0

당신은 대단합니다! 당신의 위대한 exaplanation 주셔서 감사합니다! – Victor

+0

그리고 여전히 작은 수업이지만 거대한 수업이 될 것입니다. 내 계획은 무한 정밀도의 유형을 더 많은 작업을 '이중'으로 만들어야합니다. – Victor

+1

확인. 값을 나타내는 경우 클래스 대신 구조체를 사용해야합니다. 클래스를 사용하면'Number m = n; '은'm'과'n'이 같은'Number' 객체를 가리키고 있음을 의미합니다. 구조체를 사용하면'Number m = n;'은'n'의 값을 새로운 인스턴스'm'에 복사합니다. 이것은 다른 기본 값 유형과 일치합니다. 구조체를 사용한다는 것은 또한 'Number' 형 변수가 null이 될 수 없음을 의미합니다. – cdhowie

1

implicit을보고 int에서 숫자 클래스로의 암시 적 변환을 만들고 싶습니다.

1

당신은 당신의 클래스의 연산자를 오버로드 할 수 있습니다

class Number 
{ 
    public static Number operator=(int i) 
    { 
     ... 
    } 
} 

BTW,이 같은 간단한 작은 클래스,이 구조체가 아닌 클래스를 사용하는 것이 좋습니다.

+3

C#에서 대입 연산자를 오버로드 할 수 없습니다. – cdhowie

+0

처음에는 같은 것을 생각했지만'='를 재정의 할 수는 없습니다. 대신 암시 적 변환을 사용해야합니다. [overloadable operators] 목록보기 (http://msdn.microsoft.com/en-US/library/8edha89s%28v=vs.80%29.aspx) –

관련 문제