2012-05-12 28 views
7

Có cách nào để gọi một hàm bên trong không gian tên mà không khai báo lớp bên trong C#.Phương thức bên trong không gian tên C#

Ví dụ, nếu tôi có 2 phương pháp giống hệt nhau và nên được sử dụng trong tất cả các dự án C# của tôi, có cách nào để chỉ lấy các hàm đó và biến nó thành dll và chỉ cần nói 'Sử dụng myTwoMethods' trên đầu trang và bắt đầu sử dụng các phương thức mà không khai báo lớp?

Ngay bây giờ, tôi làm: MyClass.MyMethod();

Tôi muốn làm: MyMethod();

Cảm ơn, Rohit

Trả lời

10

Bạn không thể khai báo các phương thức bên ngoài một lớp, nhưng bạn có thể thực hiện việc này bằng lớp trợ giúp tĩnh trong một dự án thư viện lớp.

public static class HelperClass 
{ 
    public static void HelperMethod() { 
     // ... 
    } 
} 

Cách sử dụng (sau khi thêm tham chiếu vào Thư viện lớp học).

HelperClass.HelperMethod(); 
+0

Có cách nào để gọi là "HelperMethod()" mà không có sự helperclass? – rkrishnan2012

+1

Không có. Phương thức phải được chứa trong một lớp hoặc cấu trúc. –

4

Tiếp theo từ đề xuất sử dụng các phương pháp mở rộng, bạn có thể làm cho phương thức là phương pháp mở rộng tắt của System.Object, từ đó tất cả các lớp đều lấy được. Tôi sẽ không ủng hộ điều này, nhưng liên quan đến câu hỏi của bạn, đây có thể là một câu trả lời.

namespace SomeNamespace 
{ 
    public static class Extensions 
    { 
     public static void MyMethod(this System.Object o) 
     { 
     // Do something here. 
     } 
    } 
} 

Bây giờ bạn có thể viết mã như MyMethod(); bất cứ nơi nào bạn có một using SomeNamespace;, trừ khi bạn đang ở trong một phương pháp tĩnh (sau đó bạn sẽ phải làm Extensions.MyMethod(null)).

+0

Tôi không thể truy cập MyMethod mà không cần gọi 'Extensions.MyMethod()' trong Form_load của tôi thuộc một lớp khác. Dù sao cũng cảm ơn bạn. – rkrishnan2012

+0

Điều này có vẻ thực sự thú vị cho đến khi tôi nhớ rằng chức năng Chính trong C# là bắt buộc phải tĩnh. –

20

Cập nhật năm 2015: Không, bạn không thể tạo "chức năng miễn phí" trong C#, nhưng bắt đầu bằng C# 6 bạn sẽ có thể gọi các hàm tĩnh mà không nhắc đến tên lớp. C# 6 will have the "using static" feature cho phép cú pháp sau:

static class MyClass { 
    public static void MyMethod(); 
} 

SomeOtherFile.cs:

using static MyClass; 

void SomeMethod() { 
    MyMethod(); 
} 
Các vấn đề liên quan