Tôi hy vọng tôi đã bỏ lỡ điều này trong tài liệu. Có cách nào để khai báo một loại đồng nghĩa trong C#?Khai báo một từ đồng nghĩa loại trong C#
Trả lời
Bạn có thể sử dụng câu lệnh sử dụng để tạo ra một bí danh cho một loại.
Ví dụ, sau đây sẽ tạo ra một bí danh cho System.Int32
gọi MyInt
using MyInt = System.Int32;
Ngoài ra, bạn có thể sử dụng thừa kế để giúp đỡ trong một số trường hợp. Ví dụ
Tạo một kiểu People
mà là một List<Person>
public class People: List<Person>
{
}
Không hẳn một bí danh, nhưng nó đơn giản hóa mọi thứ, đặc biệt là đối với các loại phức tạp hơn như thế này
public class SomeStructure : List<Dictionary<string, List<Person>>>
{
}
Và bây giờ bạn có thể sử dụng loại SomeStructure
thay vì khai báo chung chung vui vẻ đó.
Ví dụ bạn có trong nhận xét của mình, đối với một số Tuple
bạn có thể làm điều gì đó như sau.
public class MyTuple : Tuple<int, string>
{
public MyTuple(int i, string s) :
base(i, s)
{
}
}
Cập nhật để bao gồm một số lựa chọn thay thế, dựa trên nhận xét của bạn tham chiếu đến Tuple. –
Vì vậy, thực sự, câu trả lời là không, ít nhất là không giống như trong Haskell. 'using' phạm vi từ đồng nghĩa vào tệp cục bộ và bạn không thể xác định hai từ đồng nghĩa khác nhau cho cùng một loại. Thừa kế, ngoài việc được _evil_ trong chính nó, không áp dụng cho các lớp kín như String, đó là các loại chúng ta thường _most_ quan tâm đến việc tạo ra các từ đồng nghĩa. Một cách bổ sung từ đồng nghĩa "tạo" sẽ là đóng gói hoặc bộ điều hợp. Tạo một lớp 'MyTuple' có một thể hiện của' Tuple' ẩn bên trong và chuyển tiếp tất cả các cuộc gọi đến nó (tất nhiên bạn phải thực hiện tất cả các giao diện của kiểu đóng gói). – drozzy
Bạn cũng có thể sử dụng các tiện ích mở rộng để mở rộng lớp học mà không phải kế thừa hoặc sửa đổi nó trực tiếp. Ví dụ: bạn có thể thêm các phương thức vào lớp String, @drozzy. http://msdn.microsoft.com/en-us/library/bb383977.aspx – ps2goat
có cách nào để khai báo một từ đồng nghĩa loại trong C# không?
số
Bạn có thể tạo một bí danh với việc sử dụng nhưng đó là giới hạn trong 1 file (namespace).
Có 1 mẹo: http://stackoverflow.com/a/41704128/3241228. Đây không phải là giải pháp cho mọi trường hợp, nhưng nó tốt hơn là không có gì – user1234567
Có lẽ bạn đang tìm kiếm Using Alias Directives:
using MyType = MyNamespace.SomeType;
này cho phép bạn, trong mã của bạn, gõ:
// Constructs a MyNamespace.SomeType instance...
MyType instance = new MyType();
cảm ơn bạn. một số lượng lớn các phản hồi. :) tôi đoán tôi đã bỏ lỡ nó. mặc dù một trong những báo trước ở đây là tôi không thể sử dụng từ đồng nghĩa này trong các tệp khác ... điều đó sẽ tốt đẹp. – akonsu
@akonsu: Không, đây là một cấu trúc thời gian biên dịch, do đó, mỗi tệp (về mặt kỹ thuật, mỗi đơn vị biên soạn hoặc không gian tên - nó chỉ có thể hợp lệ cho ** phần ** của một tệp, tùy thuộc vào vị trí bạn đặt tệp). Bạn cần sao chép tệp này vào bất kỳ tệp nào mà bạn muốn sử dụng. Đó là điều gần nhất C# có một từ đồng nghĩa "loại", tuy nhiên. –
Có vẻ như bạn đang nói về một bí danh mà bạn có thể khai báo trong using
báo cáo của bạn ở phía trên cùng của codefiles của bạn:
using MyDate = System.DateTime;
Đây không phải là cách đơn giản nhất để giải quyết vấn đề này nhưng khi tôi cần một từ đồng nghĩa loại, tôi tạo một lớp có chuyển đổi tiềm ẩn đến và từ loại mục tiêu, ví dụ:
Tên cần phải đồng nghĩa với chuỗi, Sau đó, bạn có thể thực hiện như sau:
public class Name
{
public string Value;
public static implicit operator string(Name name) { return name.Value; }
public static implicit operator Name(string name) { return new Name {Value = name}; }
}
Việc này sẽ cho bạn khả năng sử dụng loại Tên xung quanh mã của bạn và trình biên dịch sẽ cho phép bạn gán giá trị cho nó cũng như từ một chuỗi.
Nếu bạn đã có chữ ký phương pháp sau đây:
public void SomeMethodThatNeedsName(Name name)
Bạn có thể làm điều này:
SomeMethodThatNeedsName("aNameThatComesFromString")
- 1. Khai báo các thể hiện của các từ đồng nghĩa loại tham số
- 2. Từ đồng nghĩa loại Haskell
- 3. "where" có nghĩa là gì trong khai báo lớp C#?
- 4. Lỗi C++ "nhiều loại trong một khai báo"
- 5. Loại khai báo nào?
- 6. ^sau một loại có ý nghĩa gì trong C++?
- 7. C# khai báo loại mảng lởm chởm ở mặt sau
- 8. khai báo typedef loại
- 9. Từ khóa "mới" trong khai báo thuộc tính trong C#
- 10. Khai báo các loại mà không cần chuyển đổi ngầm trong C++
- 11. Cách tạo từ đồng nghĩa công khai một cách chính xác
- 12. Khai báo chuỗi C++
- 13. Thực hiện một giao diện khai báo trong C# từ C++/CLI
- 14. C nhiều khai báo một dòng
- 15. Trường hợp đồng nghĩa loại nhiều tham số
- 16. Từ đồng nghĩa sử dụng Lucene
- 17. Chuỗi C++ Khai báo
- 18. C++ khai báo biến
- 19. Sử dụng các từ đồng nghĩa loại trong biến thế đơn lẻ
- 20. C khai báo hàm
- 21. Khai báo hàm C trong K & R
- 22. Việc khai báo và instantiating một mảng C# thực sự có ý nghĩa gì?
- 23. Khai báo mẫu lớp kế thừa từ một mẫu lớp khác trong C++
- 24. Từ điển đồng thời trong C#
- 25. Phương thức EquInfo để khai báo Loại
- 26. Làm thế nào để bạn khai báo một bí danh loại trong một hàm tạo scala?
- 27. `* &` trong khai báo hàm có nghĩa là gì?
- 28. % có nghĩa là gì trong khai báo bên ngoài OCaml?
- 29. khai báo một mảng const int trong C++
- 30. Khai báo loại mime cho html-email
bạn có nghĩa là một bí danh một 'chuỗi' la thực sự là 'System.String'? –
có. MyTuple = Tuple –
akonsu