2011-02-09 42 views
6

tôi đã thay đổi lớp cơ sở của tôi để abstract cho một dự án và bây giờ tôi nhận được lỗi sau:"Không thể tạo một thể hiện của lớp trừu tượng hoặc giao diện" Thông điệp C# lỗi

Cannot create an instance of the abstract class or interface

Tôi nhận được lỗi vì việc đặt tên cho trường hợp mới của lớp học abstract không được phép?

newPlane = new Airplane_Abstract(name, position); 
+1

Bạn đoán đúng. –

+1

nguyên tắc khuôn khổ hướng dẫn khuôn khổ khuôn khổ hướng dẫn khuôn khổ hướng dẫn – Will

+2

Khi bạn quay trở lại và đọc một chút về lớp trừu tượng, bạn sẽ đập trán của bạn và đi "duh". http://msdn.microsoft.com/en-us/library/sf985hc5(v=vs.71).aspx (điểm bullet đầu tiên) –

Trả lời

18

Bạn không thể tạo phiên bản của lớp trừu tượng. Hãy nghĩ về nó như một giao diện có thể chứa một số logic thực hiện. Bạn sẽ mong đợi điều gì xảy ra nếu bạn gọi một phương thức trừu tượng không có định nghĩa?

+0

Tất nhiên bạn _can_ tạo ra một thể hiện của một lớp bê tông thừa kế lớp 'abstract', và một cá thể như vậy cũng có thể được gọi là một thể hiện của lớp trừu tượng. –

+0

@JeppeStigNielsen: Lớp trừu tượng là lớp khai báo các phương thức trừu tượng. Bạn không thể tạo một thể hiện của lớp trừu tượng (trình biên dịch sẽ cho bạn biết!) Tất nhiên bạn * có thể tạo ra các thể hiện của các lớp con không trừu tượng, nhưng đó không phải là câu hỏi (được hỏi gần sáu năm trước ...) Ý bạn là sao? –

+0

Nó chỉ là một nhận xét về thuật ngữ. Nhiều người sẽ gọi một thể hiện của lớp con một cá thể lớp cơ sở là tốt. Xem ví dụ [câu trả lời này trong một chủ đề khác của Eric Lippert] (http: // stackoverflow.com/a/5602284/1336654). Câu trả lời của bạn tất nhiên là hoàn toàn chính xác, tôi chỉ muốn nói rằng có một thuật ngữ khác phổ biến. –

5

Bạn không thể tạo một thể hiện của lớp trừu tượng. Đó là ý nghĩa của trừu tượng.

13

Tôi đã thấy câu hỏi trước đó của bạn, trong đó bạn hỏi về ý nghĩa của "thuần ảo" (abstract trong C#).

Lý do bạn không thể nhanh chóng một lớp abstract là nó có lẽ có abstract thành viên, với không thực hiện. Vì vậy, nói lớp học của bạn trông như thế này:

abstract class Airplane_Abstract 
{ 
    public abstract int GetSomeInteger(); 
} 

Sau đó, giả sử bạn có thể thể hiện hóa một trong số này, bạn có thể viết code như thế này:

var airplane = new Airplane_Abstract(); 

// What would this be? 
int integer = airplane.GetSomeInteger(); 

Cấp, tôi không tin rằng bạn thực sự để có các thành viên trừu tượng trong một lớp trừu tượng. Nhưng ý tưởng chung của một lớp trừu tượng là nó là cái không thể tồn tại một mình; nó phải được định nghĩa thêm trong một lớp kế thừa từ nó. Thành viên trừu tượng là minh hoạ rõ ràng nhất về lý do tại sao điều này sẽ là; có thể có những lý do khác. Ví dụ:

Hãy nghĩ về Shape. Đây là một ví dụ khá phổ biến về cái gì đó có ý nghĩa như một lớp trừu tượng. Bạn không thể thực sự khởi tạo chỉ a Shape, bạn có thể? ("Tạo một hình dạng." "Loại hình nào?" "Không có loại nào. Chỉ là một hình dạng trừu tượng." Không thực sự hiệu quả, phải không?)

+0

Giải thích sử thi sir. : D –

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