2013-10-02 14 views
6

hãy tưởng tượng bạn có một số phương pháp bạn cần truy cập từ toàn bộ ứng dụng của mình. Một lớp tĩnh là lý tưởng cho việc này.Sử dụng lớp tĩnh theo giao diện?

public static class MyStaticClass 
{ 
    public static void MyMethod() 
    { 
     // Do Something here... 
    } 
} 

Nhưng có thể trong tương lai tôi sẽ thêm triển khai thứ hai của các phương pháp tĩnh trong một lớp tĩnh khác.

public static class MyStaticClass2 
{ 
    public static void MyMethod() 
    { 
     // Do Something here... 
    } 
} 

Có cách nào để thay đổi lớp tĩnh sử dụng trong mã khác của tôi mà không thay đổi các cuộc gọi từ MyStaticClass.MeMethod(); để MyStaticClass2.MyMethod();?

Tôi nghĩ về một giao diện, nhưng tôi không có ý tưởng làm thế nào để thực hiện điều này ... Nếu tôi đang nói điên nói nó và tôi chỉ đơn giản là sẽ thay đổi cuộc gọi: D

+0

Không, không có giao diện nào ở mức tĩnh. Bạn có thể nhận xét phần thân 'MyStaticClass.MeMethod' và chuyển tiếp các cuộc gọi đến' MyStaticClass2' nếu bạn đang vội vàng;) – BartoszKP

+0

Bạn có thể đặt MyMethod() trong một lớp tĩnh khác, theo cách đó bạn có thể truy cập nó từ cả hai các lớp tĩnh hiện tại của bạn. – frenchie

Trả lời

11

Bạn muốn có một factory pattern

nên nhà máy của bạn là

public static MyStaticClassFactory 
{ 
    public static IMyNonStaticClassBase GetNonStaticClass() 
    { 
     return new MyNonStaticClass1();  
    } 

} 

Instance

public class MyNonStaticClass1 : IMyNonStaticClassBase 
{ 
    // 
} 

Inte rface

public interface IMyNonStaticClassBase 
{ 
    void MyMethod(); 
} 
+0

Bạn cũng có thể sử dụng vùng chứa DI (tùy thuộc vào độ phức tạp của ứng dụng của bạn). –

+0

Tôi không biết nhiều về DI, nhưng tôi nghĩ điều đó quá phức tạp đối với tôi: D –

1

Chúng tôi sử dụng (Windsor Castle) https://www.nuget.org/packages/Castle.Windsor làm nhà máy Container.

Đó là cùng một hiệu trưởng.

Bạn có thể có nhiều triển khai cho mỗi Giao diện riêng lẻ, nhưng chỉ một giao diện được liên kết với giao diện trong Nhà máy vào thời gian chạy.

Tất cả những gì bạn cần làm là trao đổi lớp triển khai ở cấp nhà máy khi bạn cần. Đây là một công cụ hữu ích nếu bạn muốn tối ưu hóa mã của bạn, tức là một lớp Thực hiện, vì bạn biết rằng nếu bạn tìm thấy bất kỳ lỗi nào trong lớp triển khai mới, bạn có thể hoán đổi đơn giản cái đã tồn tại từ trước.

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