2011-01-21 20 views
9

Trong C++, thật dễ dàng để viết một cái gì đó dọc theo dòng:Xác định một loại bí danh trong C# trên nhiều file

#ifdef FAST 
typedef Real float; 
#endif 

#ifdef SLOW 
typedef Real double; 
#endif 

#ifdef SLOWER 
typedef Real quad; 
#endif 

Trong một số tập tin tiêu đề phổ biến vì vậy tôi chỉ đơn giản là có thể viết một phiên bản của mã và # define các phiên bản thích hợp để nhận các tệp nhị phân khác nhau.

Tôi biết trong C# bạn có thể làm điều gì đó tương tự dọc theo dòng:

using Real = double; 

Vì vậy mà bạn có thể nhận được ngữ nghĩa tương tự như typedefs. Nhưng có thể làm điều gì đó tương tự như mã C++ ở trên mà tôi sẽ không phải viết trong mỗi tệp đơn?

+3

o__O 'quad' là gì? – Mehrdad

+0

IMO nó giống như một ứng cử viên tiềm năng cho Dependency Injection nếu các tập tin nhị phân được nói là các assembly. – Terrance

+1

@Mehrdad: Loại dữ liệu điểm nổi giả định lớn gấp đôi gấp đôi. –

Trả lời

6

Không nếu bạn muốn nó sử dụng các toán tử IL sẵn có - bạn sẽ phải thực hiện nó cho mỗi tệp. Tuy nhiên, nếu bạn không cần điều đó (tôi nghi ngờ bạn làm), bạn có thể rút gọn trong một struct:

public struct Real { 
    private readonly REAL_TYPE value; 
    public(REAL_TYPE value) { this.value = value; } 
    // TODO add lots of operators (add, multiply. etc) here... 
} 

(nơi REAL_TYPE là một bí danh using trong tập tin duy nhất mà tuyên bố Real)

Vì tiền của tôi, không đáng giá. Và việc sử dụng nếu các toán tử tĩnh sẽ tương đối chậm hơn mà các phép toán IL trực tiếp mà bạn sẽ nhận được nếu nó ở tại chỗ.

+0

Vì vậy, tôi đoán tùy chọn thực sự duy nhất của tôi là một khối khổng lồ #if #elses ở đầu tất cả các tệp của tôi. –

+0

@Sagekilla hoặc tránh hoàn toàn kịch bản :). –

+0

Vâng, một trong những yêu cầu của tôi là có thể chỉ định các mức độ chính xác khác nhau được sử dụng trong tính toán. Có một tốc độ so với giao dịch chính xác tắt, trong một số trường hợp không có điểm trong việc sử dụng tăng gấp đôi và ở những người khác nó là một tối thiểu tuyệt đối. –

-3

điều gần nhất sẽ là các lớp học một phần. partial classes cho phép bạn xác định một lớp trên nhiều tệp.

+4

Điều đó không đạt được mục tiêu này chút nào; bí danh 'using' sẽ không áp dụng giữa các tệp khác nhau của một lớp từng phần. –