2010-07-09 26 views
17

Ok, do đó, cơ sở của bài viết này và để giải thích tiêu đề là đơn giản. Tôi có một giao diện với một phương pháp. Phương thức đó ở phía người dùng sẽ lấy enum làm param. Nhưng bạn không thể xác định enums trong một giao diện do đó tôi không thấy làm thế nào tôi thậm chí có thể xác định phương pháp này sau đó nếu tôi mong đợi một loại Enum là một trong những params đến.Làm thế nào để đại diện cho một Enum trong một giao diện khi bạn không thể

Vậy bạn xử lý tình huống này như thế nào? Làm cách nào bạn vẫn có thể nhận được phương thức đó trong Giao diện của mình. Bạn không biết Enum họ sẽ yêu cầu gì để gửi nhưng bạn biết chắc chắn bạn muốn nó là một enum thay vì dây ma thuật.

An Enum không phải là loại tham chiếu để bạn không thể sử dụng Object làm loại cho tham số đến. Vì vậy, không chắc chắn phải làm gì ở đây.

Trả lời

11
interface MyInterface 
{ 
    void MyMethod(Enum @enum); 
} 
+2

@ là gì? Tôi đã cố gắng tìm kiếm nó trong MSDN ... xin lỗi nếu điều này có vẻ tầm thường. Tôi mới tạo giao diện. – PositiveGuy

+8

dự đoán câu hỏi của bạn: '@ enum' là tên của biến. Không có gì đặc biệt về cú pháp đó –

+15

@coffeeaddict: Nó cho phép bạn sử dụng một từ dành riêng cho tên tham số. Nếu không có nó, bạn sẽ nhận được một lỗi biên dịch (trừ khi bạn đổi tên "enum" thành cái gì khác) –

24
public enum MyEnum 
{ 
    Hurr, 
    Durr 
} 

public interface MyInterface 
{ 
    void MyMethod(MyEnum value); 
} 

Nếu đây không phải là những gì bạn đang nói về việc làm, để lại nhận xét để mọi người có thể hiểu được những gì vấn đề của bạn là. Bởi vì, trong khi enum không được xác định trong giao diện, đây là một thiết kế hoàn toàn bình thường và chấp nhận được.

+3

Tôi đoán câu hỏi là nếu phương pháp có một enum cụ thể, hoặc BẤT CỨ enum ... – Will

+0

+1 Tôi tạo ra một iEventLogTypes 'class' như helper cho IEventLog' giao diện' của tôi. Ngay bây giờ nó chỉ chứa một 'enum', nhưng tôi có thể thêm bất kỳ" loại "mà tôi cần trong giao diện của tôi. Tôi thích gắn bó enum trong một lớp "có tên tương tự" để enum được ràng buộc chặt chẽ hơn với giao diện cụ thể, ngay cả khi nó nằm trong "name only". – franji1

0

Nếu bạn đang nói về các giao diện chung và thực tế là C# không cho phép bạn hạn chế các loại chung là enums, answers to this question bao gồm hai công việc khác nhau xung quanh.

+0

Nó hạn chế, bạn không thể xác định loại bên trong giao diện. Giống như cách bạn làm khi tạo giao diện, thêm một vùng tên có chứa một kiểu cụ thể, sau đó thêm vào đó trong các tham số hoặc kiểu trả về. –

0

Xác định enum giống như xác định một lớp hoặc xác định giao diện. Bạn có thể đặt nó vào một trong các tệp lớp của bạn, bên trong không gian tên nhưng bên ngoài định nghĩa lớp, nhưng nếu một số lớp sử dụng nó, bạn sẽ đặt nó ở đâu và bạn chọn "Loại tên nào không khớp với tệp tên "cảnh báo. Vì vậy, các "đúng" cách để làm điều đó là để đặt nó trong tập tin riêng của mình, như bạn sẽ một lớp hoặc một giao diện:

MyEnum.cs

namespace MyNamespace { internal enum MyEnum { Value1, Value2, Value3, Value4, Value5 }; } Sau đó, bất kỳ giao diện hoặc các lớp trong namespace có thể truy cập nó.

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