2009-05-18 44 views

Trả lời

20

Trong C# bạn sử dụng cấu trúc để xác định loại giá trị (trái ngược với loại tham chiếu được khai báo bởi class es).

Trong C++, cấu trúc giống với lớp có mức trợ năng mặc định là public. Vì vậy, câu hỏi nên là: là cấu trúc trong C# khác với các lớp trong C++ và, có, chúng là: Bạn không thể lấy được từ C# structs, bạn không thể có các hàm ảo, bạn không thể định nghĩa các constructor mặc định, bạn không có destructors vv

+1

Điểm của Martin về cấu trúc C# là loại giá trị khá quan trọng đối với hiệu suất vì chúng phải được đóng hộp và không được đóng hộp cho một số thao tác. Vui lòng đọc "boxing" nếu bạn phải lo lắng về hiệu suất. – dss539

11

Struct trong C# rất khác so với các lớp học, xem Structs vs Classes để biết thêm

Struct trong C++ là giống hệt nhau đến các lớp học, TRỪ rằng các thành viên là công khai theo mặc định. Ngoài ra, cấu trúc C++ có thể làm mọi thứ mà lớp C++ có thể làm.

+2

Cấu trúc C# có thể có các hàm tạo - chúng không thể có một hàm tạo * mặc định *. –

+0

Marc: Bạn đã phát hiện ra sai lầm cố ý của tôi ở đó, thực hiện tốt. . . p.s. Tôi đã sửa nó :) –

+0

@Marc: Chúng luôn có một hàm tạo mặc định, bạn không thể định nghĩa một hàm dựng riêng của mình :-) – MartinStettner

0

Có.

struct trong C# là đồng bằng cũ, bởi giá trị, các kiểu dữ liệu (như trái ngược với các lớp học được bằng cách tham khảo và có ll những thứ OO)

struct trong C++ chỉ là lớp học mà là công khai theo mặc định.

0

Bạn đang cố gắng tương tác giữa C++ và C# được quản lý? Nếu vậy, có phần mở rộng cho C++ để cho phép điều này: xem link

0

Mã C# struct được quản lý, sẽ được giải phóng bởi rác C# khi không ai đề cập đến nó nữa. Destructor của nó được gọi là bất cứ khi nào người thu gom rác quyết định để làm sạch nó lên.

Cấu trúc C++ là một đối tượng không được quản lý mà bạn phải tự dọn dẹp. Đó là destructor được dự đoán được gọi là khi bạn xóa nó, hoặc nó đi ra khỏi phạm vi.

+0

Cấu trúc C# không phải là đối tượng; chúng không phải * bản thân * tùy thuộc vào việc thu gom rác thải (trừ khi chúng là các trường trên một loại * là * rác được thu thập, tức là một lớp). C# structs không thể xác định một finalizer: "Error 1 Chỉ có loại lớp có thể chứa destructors" –

+0

Điểm tốt về finalizer. Nhưng cấu trúc là các đối tượng tôi nghĩ: "MyStruct là đối tượng" trả về true. Và ai đó phải giải phóng bộ nhớ mà struct sử dụng; bộ thu gom rác sẽ làm điều đó, nếu cấu trúc nằm trên heap. – Andomar

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