2011-01-09 47 views
5

Giả sử trong một ứng dụng Winform chúng tôi có trong program.cs:Có thể tạo bí danh cho một biến trong C# không?

static class Program 
{ 
    public static SomeClass someClass; 

    [STAThread] 
    static void Main() 
    { 
     //something 
    } 
} 

vậy để sử dụng someClass trong các lớp khác trong dự án hiện tại chúng ta nên truy cập Program.someClass

câu hỏi là chúng ta có thể thực hiện một bí danh cho Program.someClass như ví dụ c1 và sử dụng c1 trong mã thay vì Program.someClass?

+0

Không, ngoài việc tạo một biến cục bộ chứa tham chiếu đến nó. – BoltClock

+0

Khái niệm này là phản trực giác, IMHO. Ngay cả khi có thể (nói về mặt không liên quan đến các loại tham chiếu và có thể có nhiều bí danh 'xảy ra theo triệu chứng), nó chỉ có thể bảo trì mã có vấn đề hơn, và mọi người viết mã đủ xấu như nó! Đó là loại cuộc gọi cho một cơ chế đó là, nếu không có gì khác, quá mức cần thiết, tôi nghĩ vậy. –

+1

Vấn đề là gì? Bạn không nên gõ tất cả bằng tay anyway; sử dụng Intellisense. –

Trả lời

6

Nếu bạn chỉ cần tìm đến bí danh nó cho cổ tay thân thiện, làm điều đó như một đại biểu nội tuyến, như thế này:

Func<SomeClass> c1 =() => Program.someClass; 

Nhưng tôi đồng ý rằng nó làm cho mã của bạn ít rõ ràng hơn trong hầu hết các trường hợp.

+1

@HPT: 'c1()' sẽ trả về trường hợp đó. Vì vậy, bạn có thể thực hiện 'c1(). SomeClassMethod()' chẳng hạn. – zerkms

+0

@zerkms: bạn nói đúng. đã hoạt động. –

+0

@HPT: nó vẫn là một sự phụ thuộc. Làm thế nào bạn sẽ lấy lại 'c1' instance trong' AnotherClass'? Nếu bạn có thể truy cập 'c1' - thì bạn cũng có thể truy cập' Program.someClass'. – zerkms

1

Chỉ cần vượt qua đối tượng đó cho mỗi lớp đó cần phải làm việc với nó

+0

câu hỏi chỉ là về dude khả năng. Tôi biết nó không hữu ích. –

+2

@HPT: người lập trình thực hiện ** nhiệm vụ thực **. Tốt hơn là để vượt qua đối tượng. Thế giới sẽ tốt hơn nếu một số sẽ sử dụng các lớp ít tĩnh hơn, do đó viết mã linh hoạt hơn. – zerkms

+0

+1 để tiếp cận tốt hơn, nhưng câu hỏi chỉ là về sự tò mò của tôi và tôi đang tìm cách để giải quyết vấn đề này bằng cách xóa vấn đề chính: D –

2

Giả sử bạn muốn đạt được điều gì đó như macro trong C/C++ và cũng muốn loại bỏ "Chương trình" làm phạm vi đặt tên, tôi nghĩ bạn không thể làm điều đó trong C#.

+0

Đó là sự thật đơn giản. – mireazma

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