2010-06-17 39 views
27

Tôi có public static class và tôi đang cố gắng truy cập appSettings từ tệp app.config trong C# và tôi nhận được lỗi được mô tả trong tiêu đề.Không thể khai báo các thành viên cá thể trong một lớp tĩnh trong C#

public static class employee 
{ 
    NameValueCollection appSetting = ConfigurationManager.AppSettings;  
} 

Tôi làm cách nào để hoạt động?

+1

làm cho NameValueCollection static .. –

+7

Bạn có hiểu ý nghĩa tĩnh nào không? Từ câu hỏi của bạn, tôi không nghĩ rằng bạn làm. Bạn có lẽ nên làm quen với định nghĩa của nó, đặc biệt là liên quan đến các lớp C#. Xem: http://msdn.microsoft.com/en-us/library/98f28cdx(VS.71).aspx –

+5

Đây là lần đầu tiên tôi nhìn thấy một lớp 'nhân viên 'tĩnh. – BoltClock

Trả lời

65

Nếu lớp được khai báo là tĩnh, tất cả các thành viên phải là tĩnh.

static NameValueCollection appSetting = ConfigurationManager.AppSettings; 

Bạn có chắc chắn muốn lớp nhân viên của bạn tĩnh không? Bạn gần như chắc chắn không muốn hành vi đó. Có lẽ bạn nên loại bỏ ràng buộc tĩnh khỏi lớp và các thành viên.

+1

là có bất kỳ lý do nào. tại sao không phải mỗi thành viên được giả định là tĩnh, tiết kiệm thời gian đánh máy quý giá. – Sherlock

+2

câu hỏi hay @Sherlock, đến (xấp xỉ) trích dẫn Eric Lippert; có lẽ bởi vì ai đó sẽ phải ưu tiên và thực hiện hành vi đó ... :) –

+0

có lẽ vì nếu bạn xem JUST thành viên, có một cơ hội công bằng bạn sẽ bối rối trong một thời gian dài tại sao hành vi thành viên của bạn giống như một thành viên tĩnh, nhưng nó không được tuyên bố là statis. Buộc chúng tôi nhập "tĩnh" sẽ tiết kiệm một số người đóng góp trong tương lai. – Hacky

5

Nó nói những gì nó có nghĩa là:

làm cho lớp học của bạn không tĩnh:

public class employee 
{ 
    NameValueCollection appSetting = ConfigurationManager.AppSettings;  
} 

hoặc thành viên tĩnh:

public static class employee 
{ 
    static NameValueCollection appSetting = ConfigurationManager.AppSettings;  
} 
1

Các bạn đã thử bằng cách sử dụng lớp 'tĩnh' lưu trữ tương tự ?:

public static class employee 
{ 
    static NameValueCollection appSetting = ConfigurationManager.AppSettings;  
} 
5

Việc khai báo một cá thể thành viên trong một lớp tĩnh là không hợp lệ. Lớp tĩnh không thể được khởi tạo do đó nó không có ý nghĩa để có một thành viên cá thể (chúng sẽ không bao giờ được truy cập).

1

Như John Weldon đã nói tất cả thành viên phải tĩnh trong lớp tĩnh. Hãy thử

public static class employee 
{ 
    static NameValueCollection appSetting = ConfigurationManager.AppSettings;  

} 
1
public static class Employee 
{ 
    public static string SomeSetting 
    { 
     get 
     { 
      return ConfigurationManager.AppSettings["SomeSetting"];  
     } 
    } 
} 

Khai báo tài sản như tĩnh, là tốt. Ngoài ra, không bận tâm lưu trữ một tài liệu tham khảo tư nhân để ConfigurationManager.AppSettings. ConfigurationManager đã là một lớp tĩnh.

Nếu bạn cảm thấy rằng bạn phải cửa hàng một tham chiếu đến appSettings, hãy thử

public static class Employee 
{ 
    private static NameValueCollection _appSettings=ConfigurationManager.AppSettings; 

    public static NameValueCollection AppSettings { get { return _appSettings; } } 

} 

Đó là hình thức tốt để luôn đưa ra một định tố truy cập rõ ràng (tư nhân, công cộng, vv) mặc dù mặc định là tư nhân.

2

Tôi biết bài này là cũ nhưng ...

tôi đã có thể làm được điều này, vấn đề của tôi là tôi quên để làm cho tài sản của tôi tĩnh.

public static class MyStaticClass 
{ 
    private static NonStaticObject _myObject = new NonStaticObject(); 

    //property 
    public static NonStaticObject MyObject 
    { 
     get { return _myObject; } 
     set { _myObject = value; } 
    } 
} 
Các vấn đề liên quan