2010-07-29 41 views
5

Có thể hủy khai báo biến trong C# không? Nếu vậy, làm thế nào?Không khai báo biến trong C#

+22

Xóa dòng mã khai báo chúng. – Brian

+1

Bạn có thể mô tả kịch bản của mình không? Tại sao bạn nghĩ rằng bạn cần phải undeclare một biến? Bạn đang xử lý các tài nguyên không được quản lý? Bạn đang tạo ra nhiều đối tượng và giữ tài liệu tham khảo của họ? Bạn có hết hạn bất kỳ vấn đề hiệu suất nào không? Bạn đến từ C++? – Kobi

+1

Bạn có thể xác định rõ ràng từ "undeclare" có nghĩa là gì cho bạn không? bởi vì tôi không có ý tưởng gì "undeclare" có nghĩa là một động từ. Tôi biết "biến cục bộ không khai báo" là gì - biến cục bộ mà bạn dự định khai báo nhưng bị bỏ quên làm như vậy. Các biến cục bộ không khai báo là một lỗi trong C# nhưng được cho phép trong một số ngôn ngữ, như VBScript. Tôi không thể hiểu được ý của bạn bằng hình thức động từ. Bạn có thể làm rõ? –

Trả lời

4

Bạn không quan tâm đến việc undeclaring trong C# (tôi nghĩ rằng bạn có nghĩa là unallocating bằng cách này, phải không?) Hoặc bất kỳ ngôn ngữ khác. Net, thu gom rác sẽ unallocating bộ nhớ liên kết với biến .

Đối với tài nguyên không được quản lý (phông chữ, kết nối cơ sở dữ liệu, tệp, v.v.), bạn cần gọi phương thức Vứt bỏ, hoặc rõ ràng hoặc bằng cách đặt biến trong khối sử dụng.

Thông tin thêm về thu gom rác Net: http://www.csharphelp.com/2006/08/garbage-collection/

1

Bạn không - khi biến không nằm trong phạm vi hoặc không có nhiều tham chiếu tồn tại, nó sẽ tự động bị thu thập rác.

Tại sao bạn vẫn muốn làm điều này một cách rõ ràng; ngữ cảnh là gì? Rất có thể bạn chỉ cần sử dụng tên biến mới hoặc tái cấu trúc phần mã có liên quan thành một hàm mới.

10

đóng phạm vi (giới thiệu với '{') có chứa các khai báo biến:

int c=0; 
{ 
int a=1; 
{ 
    int b=2; 
    c=a+b; 
} // this "undeclares" b 
c=c+a; 
} // this "undeclares" a 
+3

Điều này không giống như undeclaring. Nó cũng không được khuyến khích thực hành ngoại trừ trong trường hợp lẻ. Nó tạo ra tùy ý làm tổ khi bạn có thể (và nên) chỉ được sử dụng một tên biến mới. – Noldorin

+0

@Noldorin, +1 từ tôi. Trong khi nó sẽ cung cấp hiệu ứng tương tự * gần như * như là có thể undeclare một biến, nó sẽ làm cho một cơn ác mộng trong mã duy trì. Mong muốn undeclare một biến gần như luôn luôn chỉ ra một nhu cầu để refactor một phương pháp thành nhiều phương pháp riêng biệt. – Rob

+0

@Rob: Đồng ý.Đó là một "mã mùi" trong quan điểm của tôi. – Noldorin

0

Tôi không nghĩ rằng có như vậy điều như các đối tượng undeclaring i .Net. Nếu đối tượng của bạn sử dụng tài nguyên cần được dọn sạch, nó sẽ thực hiện giao diện IDisposable. Nếu không thì người thu gom rác sẽ chăm sóc mọi thứ.

1

Nếu đối tượng là IDisposable, bạn có thể sử dụng chúng trong khối using. Trong phần còn lại của các trường hợp tôi muốn đi với những gì Luther đã đề cập.

using (Car myCar = new Car()) 
{ 
    myCar.Run(); 
} 
+1

Để thêm vào câu trả lời này, trong hầu hết các trường hợp khi đối tượng là IDisposable bạn ** nên ** bọc nó trong một khối 'sử dụng'. – Kobi

0

Tôi không nghĩ rằng có thể bằng ngôn ngữ hiện tại. Một kịch bản hợp lý là:

void doSomething(String objectId) { 
    BusinessObject obj = findBusinessObject(objectId); 

    // from this point on the objectId should not be used anymore 
    undef objectId; 

    // continue using obj ... 
} 

Một trường hợp khác là khi bạn thực hiện một số phương thức từ giao diện và bạn muốn sử dụng một trong các tham số, đặc biệt là trong các phương pháp dài.

Object get(int index, Object defaultValue) { 
    undef index, defaultValue; 

    return "constant default value"; 
} 

Đây cũng là tài liệu mà lập trình viên nghĩ về các thông số không được sử dụng khác.

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