2009-10-09 37 views

Trả lời

11

Loại đã được khai báo rõ ràng với tên. Ví dụ, bất kỳ lớp hoặc cấu trúc nào mà bạn khai báo là một kiểu được đặt tên.

Cũng có các loại ẩn danh, được khai báo không có tên và trình biên dịch gán tên cho loại đó mà nhà phát triển không thể truy cập.

Bạn có thể đọc thêm về các loại khác nhau của types in C#.

3

Đây là tham chiếu đến các biến số được nhập rõ ràng, trái ngược với các biến có loại ẩn danh. Bất cứ điều gì không phải là một loại vô danh là một loại có tên.

Giới thiệu với (tôi nghĩ) Net 3.0, kiểu nặc danh cung cấp một cách thuận tiện để tạo các đối tượng chứa một tập hợp các read-only tài sản, mà không cần phải xác định một loại tên rõ ràng cho mục đích đó.

Mặc dù việc thực hiện các kiểu nặc danh cũng đòi hỏi việc sử dụng các type inference (đối với đánh máy của các thuộc tính của đối tượng), kiểu nặc danh không nên nhầm vớiImplicitly Typed Local Variables theo đó var từ khóa giải phóng các lập trình viên của một cách rõ ràng nói một loại biến, nhưng nơi một loại được cung cấp hiệu quả bởi trình biên dịch. (hầu hết các biến được đánh máy ngầm định không phải là các kiểu ẩn danh và do đó được đặt tên theo kiểu. Nó chỉ là trình biên dịch thực hiện việc đặt tên).

+0

Điều này là sai. Loại suy luận và loại ẩn danh không liên quan. Loại suy luận có thể được sử dụng trong một số trường hợp để loại trừ các tham số chung hoặc với từ khóa var. Các loại ẩn danh là các kiểu chưa được đặt tên được tạo khi đang di chuyển. – recursive

+0

@recursive Cảm ơn bạn! Tôi đọc về điều này và nhận ra nơi tôi đã đi sai. Loại suy luận thường được sử dụng trong trường hợp của các loại vô danh, nhưng, hai khái niệm thực sự là hoàn toàn riêng biệt. Tôi sẽ sửa chữa phản ứng của tôi cho phù hợp (hoặc giết nó hoàn toàn ...) – mjv

+1

Cool. Đã xóa Downvote. – recursive

2

Bất kỳ loại nào không phải là Annonymous Type sẽ là "Loại được đặt tên".

+1

Theo định nghĩa của bạn, hai chiều-mảng-của số nguyên là một loại có tên. Điều đó thực sự có ý nghĩa? Nếu vậy, tên của nó là gì? –

+1

@Eric Cảm ơn bạn đã đọc câu hỏi này.Xin vui lòng ném thêm ánh sáng vào cuộc thảo luận này nếu bạn cảm thấy có bất cứ điều gì thiếu hoặc hiểu lầm. – csharpbaby

2

Loại được đặt tên là bất kỳ loại được xác định rõ ràng nào (cấu trúc, lớp, v.v.) mà bạn tạo và đặt tên.

ví dụ .:

public class Foo 
{ 
    public string Bar{ get; set; } 
} 

Trong trường hợp này, Foo là một loại được đặt tên.

Đây là như trái ngược với một loại vô danh, mà thường được tạo ra khi đang bay:

var MyFoo = new { Bar = "some text" }; 

tôi vừa tạo ra một đối tượng mới, được gọi là MyFoo. Chúng tôi đã không cho nó một tên rõ ràng, nhưng chúng tôi đã ngầm cho nó một thuộc tính String, Bar, với giá trị "some text".

+0

từ bình luận của MJV ở trên, 'Var MyFoo' có nghĩa là biến được nhập hoàn toàn. Loại ẩn danh này như bạn đã đề cập đến như thế nào? cảm ơn – csharpbaby