2009-08-11 33 views
5

Tôi đã viết mã mà không nhận ra tại sao tôi có thể truy cập các giá trị không đổi trong các phương thức tĩnh .
Tại sao biến const có sẵn trong một phương thức tĩnh?

Tại sao có thể truy cập vào các giá trị const mà không tuyên bố nó là static?

ví dụ,) Đó là quy phạm pháp luật để gọi IMAGE_FILE_EXTENSION trong AddImageToDocument(...)

public abstract class ImageDocumentReplacer : DocumentReplacer 
{ 
    private const string IMAGE_FILE_EXTENSION = ".tif"; 

    private static void AddImageToDocument(int documentId, string separatedPath) 
    { 
     Console.WriteLine(IMAGE_FILE_EXTENSION); 
    } 
} 

Trả lời

17

const thành viên đang ngầm static. Chúng thuộc về lớp chứ không phải là một cá thể cụ thể. Kết quả là bạn không thể sử dụng this.myConstant nhưng MyClass.myConstant.

Trích dẫn các đặc điểm kỹ thuật C# 3.0 (phần §10.4 Constants):

Mặc dù hằng được coi static thành viên, một hằng-khai không yêu cầu hay cho phép một modifier static. Đó là lỗi cho cùng một công cụ sửa đổi xuất hiện nhiều lần trong một khai báo liên tục.

+2

Chỉ cần thêm: Thử sử dụng const tĩnh trình biên dịch có thể sẽ phàn nàn;) –

+0

@Samuel: Có, siree nó! – Sung

+0

Tôi không bao giờ nghĩ đến const là * ngầm * tĩnh ... Cảm ơn Mehrdad. – Sung

1

Tôi hy vọng rằng, vì hằng số không thể thay đổi cá thể thành cá thể, điều này giúp chúng an toàn khi truy cập từ phương pháp tĩnh.

2

Tại sao nó không thể thực hiện được? Vì giá trị được cố định tại thời gian biên dịch, nên không có sự không nhất quán (vì sẽ có các biến hoặc readonly trường có thể được khởi tạo thành các giá trị khác nhau cho các phiên bản khác nhau khi chạy)

Các vấn đề liên quan