2010-01-05 43 views
12

thể trùng lặp:
Can I add extension methods to an existing static class?Phương pháp mở rộng trên lớp tĩnh?

Tôi biết tôi có thể làm dưới đây để mở rộng một lớp. Tôi có một lớp học tĩnh tôi muốn mở rộng. Làm thế nào tôi có thể làm điều đó? Tôi muốn viết ClassName.MyFunc()

static public class SomeName 
{ 
    static public int HelperFunction(this SomeClass v) 
+2

http://stackoverflow.com/questions/249222/can-i-add-extension-methods-to-an-existing-static-class –

Trả lời

15

Bạn không thể có phương pháp khuyến nông trên lớp tĩnh bởi vì phương pháp khuyến nông chỉ áp dụng đối với instantiable loại và các lớp học tĩnh không thể khởi tạo.

Kiểm tra mã này ..

public static bool IsEmail(this string email) 
    { 
     if (email != null) 
     { 
      return Regex.IsMatch(email, "EmailPattern"); 
     } 

     return false; 
    } 

tham số đầu tiên để ISEMAIL() là loại ví dụ mở rộng và không chỉ kiểu riêng của mình. Bạn không bao giờ có thể có một thể hiện của một kiểu tĩnh.

10

Bạn không thể mở rộng lớp tĩnh trong C#. Các phương thức mở rộng hoạt động bằng cách định nghĩa các phương thức tĩnh xuất hiện như các phương thức thể hiện trên một số kiểu. Bạn không thể định nghĩa một phương thức mở rộng mở rộng một lớp tĩnh.

0

Bạn có thể muốn biến lớp tĩnh của mình thành singleton. Sau đó, sẽ chỉ có một ví dụ của lớp. Và bạn có thể sử dụng các phương thức mở rộng trên nó vì nó là một thể hiện.

Điều này được cung cấp cho bạn quyền truy cập vào mã nguồn của lớp học.

+1

Chúng ta có thể mong đợi một lời giải thích cho điều này (tôi ghét singleton)? –

+8

Vâng, bạn sẽ không mong đợi chỉ là một ví dụ của "Tôi ghét singleton", phải không? –

+0

Làm thế nào để bất cứ ai có thể xóa bỏ tôi, tôi ghét singleton, tôi ghét nhận xét singleton? –

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