2012-05-23 27 views
8

tôi thấy tôi có thể viết:Tôi có thể làm gì với biến tĩnh được bảo vệ/riêng tư?

protected static 

trong C# lớp học của tôi (trong trường hợp của tôi, một aspx.cs). Cũng như:

private static 

Điều đó có nghĩa là gì? Tĩnh có thể truy cập ở mọi nơi. Tại sao được bảo vệ/riêng tư?

+0

http://stackoverflow.com/questions/135020/advantages-to-using-private-static-methods – CraigTP

+0

Tôi biết! Xin lỗi, tôi đến từ Java. Có những thứ khác nhau một chút ... – markzzz

Trả lời

18

Định nghĩa tĩnh không phải là "khả dụng ở mọi nơi". Nó là một biến được chia sẻ trên loại nó được khai báo trong phạm vi của một AppDomain.

Access Modifiers không thay đổi định nghĩa này, nhưng rõ ràng ảnh hưởng đến phạm vi truy cập.

Bạn đang bối rối với công cụ sửa đổi static với công cụ sửa đổi truy cập. Biến tĩnh vẫn cần xác định khả năng truy cập. Trong ví dụ của bạn, các biến tĩnh riêng tư chỉ có thể truy cập được trong kiểu nó được định nghĩa trong, được bảo vệ sẽ có thể truy cập được trong kiểu và bất kỳ kiểu dẫn xuất nào.

Chỉ cần lưu ý, lưu ý rằng IIS (lưu trữ các ứng dụng ASP.NET) tái chế các quy trình công nhân, sẽ xóa bất kỳ giá trị biến tĩnh nào đang tồn tại vào thời điểm đó.

0

static không có nghĩa là nó có thể truy cập ở mọi nơi. Bạn vẫn cần protected/private để xác định khả năng hiển thị.

1

Một sử dụng là bạn có thể tạo các lĩnh vực tĩnh tư nhân, và phơi bày bằng các phương pháp tĩnh công cộng/tài sản (áp dụng một số logic kinh doanh tùy chỉnh như singleton, vv)

-1

Sử dụng bảo vệ nếu bạn chỉ muốn biến để có thể truy cập thông qua các lớp nhất định, ví dụ khi sử dụng đa hình và thừa kế. Công khai làm cho nó luôn luôn hiển thị trong phạm vi và riêng tư là khá rõ ràng.

2

Nếu bạn khai báo biến dưới dạng Private thì bạn không thể truy cập biến ngoài lớp hiện tại và nếu khai báo là Protected thì chỉ có lớp dẫn xuất mới có thể truy cập biến đó..Trong ví dụ của bạn ý nghĩa cơ bản của tư nhân và được bảo vệ không thay đổi vì vậy nó không có vấn đề làm thế nào bạn khai báo nó tĩnh hoặc đơn giản một ...

class Test 
{ 
    protected static int var1; 
    private static int var2; 
} 
class MainProgram : Test 
{ 
    private static int test; 
    static void Main(string[] args) 
    { 
     Test.var1 = 2; 
     Test.var2 = 5; //ERROR :: We are not able to access var2 because it is private     
    } 
} 

trong đoạn code trên bạn có thể thấy nếu chúng ta muốn biến tĩnh có thể truy cập chỉ trong lớp hiện tại sau đó bạn cần phải biến thành tư nhân.

+3

Nguồn: MSDN (các trang khác nhau). Luôn lịch sự để ghi nhận nguồn của bạn. – tomfanning

0

riêng
Loại hoặc thành viên chỉ có thể được truy cập bằng mã trong cùng một lớp hoặc cấu trúc.
được bảo vệ
Loại hoặc thành viên chỉ có thể được truy cập bằng mã trong cùng một lớp hoặc cấu trúc hoặc trong lớp dẫn xuất. Công cụ sửa đổi tĩnh
Phương thức tĩnh được gọi mà không có tham chiếu cá thể.

+0

phương pháp tĩnh? Tôi đang nói về các biến, không phải là phương pháp ... – markzzz

+0

@markzzz Nó không quan trọng, làm thế nào bạn truy cập chúng là như nhau - một trong những chỉ đơn giản là một cuộc gọi phương thức, khác là truy cập lĩnh vực/tài sản. –

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