2012-06-29 4 views
3

무제한 크기의 정수 값을위한 클래스를 개발하려고합니다. 할당 연산자와 함께 사용되는 새로운 사용자 정의 상수 접미어를 으로 지정하면됩니다. 예를 들어C에서 사용자 정의 상수 접미사 만들기 #

:

클래스 이름을 가정 할 수는에서 BigInt 및 생성 된 접미사가 B에게이다

할당 문이

// B character will tell the compiler about the New Data Type 
BigInt x = 111111111111111111111111111111111111111111111111B; 

처럼이를 달성 할 수있는 방법이 될 것인가?

특별 감사

+7

단순히 사용할 수없는 어떤 이유가 기존의 ['BigInteger'] (http://msdn.microsoft.com/en-us/library/system.numerics .biginteger.aspx) 구조체? – Oded

+2

아니, 당신이 자신의 C# 컴파일러를 만들고 싶지 않으면 불가능합니다. 간단히 말해서 새로운 BigInt ("111")'을 제안 할 것입니다. 이것은 당신의 모든 리터럴이 컴파일되었을 가능성이 높습니다. –

답변

6

아니,이 시간에 C#에서이 작업을 수행 할 수있는 방법이 없다.

해결 방법 : C# 구문을 기반으로 매우 유연하고 메타 프로그래밍에 익숙한 언어 인 Nemerle을 확인할 수 있습니다.

5

설명하는 방식으로 직접 언어를 확장 할 수있는 방법이 없습니다.

은 C#과 같은 .NET 언어를 작성하고 해당 지정자를 허용하지만 사용자가하려는 것과 아무 것도 같습니다.

참고 : 임의의 크기의 정수에는 기존 구조가 있습니다. BigInteger - 바퀴를 다시 만들 필요가 없습니다.

1

Microsoft는 이미이 작업을 수행했습니다. BigInteger라고합니다. 그것이 .NET 4.0으로 나온다고 생각하십니까?

가 여기 MSDN 링크입니다 : 그런를 연장으로 http://msdn.microsoft.com/en-us/library/system.numerics.biginteger.aspx

, 난 그 C#으로 가능하다고 생각하지 않습니다. 대입 연산자를 오버로드해야하는데, 그것은 내가 아는 한 C++에서만 가능합니다.

4

아니요. 언어/컴파일러가이 기능을 지원하지 않습니다. 살펴보고 싶은 가까운 항목은 내재적 인 conversion operator입니다. 즉,이 같은하자 것 :

BigInt b = "1234"; 

public class BigInt 
{ 
    public static implicit operator BigInt(string value) 
    { 
     return new BigInt {Value = value}; 
    } 
    public string Value { get; private set; } 
}