Có một cấu trúc trong C# cho phép bạn tạo một lớp ẩn danh thực hiện một giao diện, giống như trong Java?Giao diện triển khai lớp ẩn danh trong C#?
Trả lời
Như đã nêu, không, điều này là không thể. Tuy nhiên, bạn có thể tạo một lớp thực hiện giao diện mong muốn và chấp nhận một lambda trong hàm tạo của nó để bạn có thể biến một lambda thành một lớp thực hiện giao diện. Ví dụ:
public class LambdaComparer<T> : IEqualityComparer<T>
{
private readonly Func<T, T, bool> _lambdaComparer;
private readonly Func<T, int> _lambdaHash;
public LambdaComparer(Func<T, T, bool> lambdaComparer) :
this(lambdaComparer, EqualityComparer<T>.Default.GetHashCode)
{
}
public LambdaComparer(Func<T, T, bool> lambdaComparer,
Func<T, int> lambdaHash)
{
if (lambdaComparer == null)
throw new ArgumentNullException("lambdaComparer");
if (lambdaHash == null)
throw new ArgumentNullException("lambdaHash");
_lambdaComparer = lambdaComparer;
_lambdaHash = lambdaHash;
}
public bool Equals(T x, T y)
{
return _lambdaComparer(x, y);
}
public int GetHashCode(T obj)
{
return _lambdaHash(obj);
}
}
sử dụng (rõ ràng là không làm gì hữu ích, nhưng bạn sẽ có được ý tưởng)
var list = new List<string>() { "a", "c", "a", "F", "A" };
list.Distinct(new LambdaComparer<string>((a,b) => a == b));
Ooh, một chút lạ mắt! –
đây là giải pháp tốt nhất cho vấn đề này tôi đã thấy chưa, thiên tài –
giải pháp rất mát mẻ. Hạn chế chính là bạn phải tạo một lớp cơ sở cho mỗi giao diện. Có cách nào đơn giản để làm cho nó chung chung? –
No. C# không hỗ trợ các lớp ẩn danh (ngoại trừ các loại ẩn danh không thể xác định phương thức).
Không, Biểu thức Lambda không thể triển khai bất kỳ giao diện bổ sung nào so với giao diện đã thực hiện.
Bạn cũng so sánh những điều sai trái. Tôi đoán bạn thực sự có nghĩa là để hỏi nếu các loại vô danh trong C# có thể thực hiện các giao diện. Câu trả lời cho điều đó cũng không.
- 1. C# ẩn danh triển khai giao diện (hoặc lớp trừu tượng)
- 2. cách triển khai Giao diện trong C++?
- 3. Giao diện triển khai C#
- 4. C# Lớp trừu tượng triển khai Giao diện
- 5. Lớp ẩn danh Java triển khai ActionListener?
- 6. Làm cách nào để triển khai giao diện Java ẩn danh trong scala?
- 7. Tại sao phương thức giao diện C# được triển khai trong một lớp là công khai?
- 8. Thừa kế song song giữa các lớp giao diện và lớp triển khai trong C++
- 9. Cách triển khai giao diện trong javascript
- 10. Giao diện triển khai lớp chung không thành công
- 11. JAXB - các lớp được tạo ra triển khai giao diện
- 12. Thực hiện Giao diện vs Triển khai Giao diện Rõ ràng trong C#
- 13. C# triển khai giao diện một phần tốt nhất trong lớp cơ sở/trừu tượng
- 14. Thực hiện hai giao diện trong một lớp vô danh
- 15. Triển khai giao diện không tương thích
- 16. PHP: cách lấy danh sách các lớp triển khai giao diện nhất định?
- 17. TinyIoC - Nhiều triển khai giao diện
- 18. truyền loại ẩn danh sang giao diện?
- 19. Tại sao lớp của tôi không thể triển khai giao diện được khai báo bên trong?
- 20. C++: Nguồn gốc + Lớp cơ sở triển khai một giao diện đơn lẻ?
- 21. Triển khai giao diện INamingContainer cho UpdatePanel?
- 22. Trình biên dịch C# không nhận ra một lớp đang triển khai một giao diện
- 23. Java: mở rộng một lớp và triển khai một giao diện có cùng phương thức
- 24. Tại sao giao diện không thể triển khai giao diện khác?
- 25. Triển khai cả giao diện Bản đồ và Danh sách trong Java?
- 26. Lớp học có thể mở rộng cả lớp và triển khai Giao diện
- 27. Triển khai giao diện rõ ràng trong VB.NET
- 28. Làm cách nào để triển khai giao diện trong Ada?
- 29. Phân cấp lớp cho giao diện C#
- 30. Lợi ích của việc triển khai giao diện
liên quan http://stackoverflow.com/questions/191013/can-ac-sharp-anonymous-class -implement-an-interface – mcabral
Bạn đang bối rối các biểu thức lambda (các hàm ẩn danh) với các lớp ẩn danh. Nó không có ý nghĩa đối với một hàm để thực hiện các giao diện – dtech