Không có trong Java cũng như trong C#, bạn có thể tạo một thể hiện của một lớp trừu tượng. Bạn sẽ luôn cần phải tạo một lớp cụ thể thừa kế từ lớp trừu tượng. Java cho phép bạn thực hiện điều đó mà không cần đặt tên lớp, sử dụng các lớp ẩn danh. C# không cung cấp cho bạn tùy chọn đó.
(Edited để hiển thị một delegate như một sự thay thế. Tôi không có quyền truy cập vào VS đây, vì vậy nó có thể không biên dịch, nhưng đây là ý tưởng)
Thông thường trong Java khi bạn sử dụng một lớp trừu tượng với một phương thức trừu tượng duy nhất (SAM) những gì bạn đang thực sự cố gắng đạt được là truyền một số mã dưới dạng tham số. Giả sử bạn cần sắp xếp một mảng các đối tượng dựa trên tên lớp, sử dụng Bộ sưu tập.loại (Collection, Comparator) (Tôi biết Comparator là một giao diện, nhưng nó là ý tưởng giống nhau) Sử dụng một lớp ẩn danh để tránh phụ đánh máy, bạn có thể viết một cái gì đó giống như
Comparator<Object> comparator = new Comparator<Object>{
@Override
public int compare(Object o1, Objecto2) {
return o1.getClass().getSimpleName().compareTo(o2.getClass().getSimpleName()));
}//I'm not checking for null for simplicity
}
Collections.sort(list, comparator)
Trong C# 2.0 và xa hơn nữa bạn có thể thực hiện khá nhiều điều tương tự bằng cách sử dụng đại biểu Comparison<T>
. Một đại biểu có thể được coi là một đối tượng hàm, hoặc trong các từ java, một lớp với một phương thức duy nhất. Bạn thậm chí không cần phải tạo một lớp, mà chỉ là một phương thức sử dụng đại biểu từ khóa.
Comparison<Object> comparison = delegate(Object o1, Object o2)
{
return o1.class.Name.CompareTo(o2.class.Name);
};
list.sort(comparison);
Trong C# 3.0 và xa hơn nữa bạn có thể viết thậm chí còn ít mã sử dụng lambdas và suy luận kiểu:
list.sort((o1, o2) => o1.class.Name.CompareTo(o2.class.Name))
Dù sao, nếu bạn đang chuyển mẫu mã java để C# bạn nên đọc về các đại biểu ... trong nhiều trường hợp, bạn sẽ sử dụng các đại biểu thay vì các lớp ẩn danh. Trong trường hợp của bạn, bạn đang sử dụng một phương thức void toDoSmth(). Có một đại biểu được gọi là Hành động mà là khá nhiều điều tương tự, một phương pháp không có tham số và không có trở lại.
Hiện tại câu hỏi của bạn là * xa * quá mơ hồ. Đặc biệt, bạn đã đề cập đến các lớp trừu tượng trong tiêu đề và trong các thẻ, nhưng không phải trong phần nội dung của văn bản. Nếu bạn có một đoạn mã Java cụ thể, hãy đăng nó. –
Ông đã đề cập đến một lớp học có tên "Abstact". Có thể có liên quan. –
Không, lớp Tóm tắt bằng trừu tượng :) – jitm