Tôi đã có một lớp trừu tượng như thế này;Nhận loại hiện tại theo phương pháp tĩnh, chung?
public abstract PropertyBase
{
public static System.Type GetMyType()
{
return !!!SOME MAGIC HERE!!!
}
}
Tôi muốn phân lớp và khi tôi gọi GetMyType() tĩnh, tôi muốn trả về loại của lớp con. Vì vậy, nếu tôi tuyên bố một loại phụ;
public class ConcreteProperty: PropertyBase {}
sau đó khi tôi gọi
var typeName = ConcreteProperty.GetMyType().Name;
Tôi hy vọng 'typeName' được thiết lập để "ConcreteProperty." Tôi nghi ngờ không có cách nào để làm điều đó, nhưng tôi quan tâm nếu có ai đó biết cách để có được thông tin này.
(Các vấn đề cụ thể tôi đang cố gắng để giải quyết là tính cách rườm rà của tài sản phụ thuộc trong WPF, tôi rất muốn có thể làm một cái gì đó như thế này;
class NamedObject : DependencyObject
{
// declare a name property as a type, not an instance.
private class NameProperty : PropertyBase<string, NamedObject> { }
// call static methods on the class to read the property
public string Name
{
get { return NameProperty.Get(this); }
set { NameProperty.Set(this, value); }
}
}
Và tôi gần có một thực hiện, nhưng tôi có thể không hoàn toàn nhận được thông tin tôi cần ra khỏi lớp NameProperty của tôi)
Lý do để tĩnh là gì? Được khai báo là ảo hoặc trừu tượng, bạn sẽ gặp sự cố –
TẠI SAO TUYỆT VỜI: Đó là góc lẻ và một C# không thực sự được thiết kế cho. Đôi khi loại của bạn chỉ có thể có một giá trị. Vì vậy, 'lớp Steve: Person {}' khai báo một kiểu, nhưng vì chỉ có một giá trị có thể, lớp 'Steve' cũng xác định một cá thể. Tuyên bố loại 'Steve' tuyên bố đơn 'Steve'. WPF DP là như thế này; họ không thể quyết định xem chúng là dữ liệu cá thể, siêu dữ liệu hay các loại. Tôi đang cố gắng gấp tất cả chúng thành một cấu trúc mã. Đó là tất cả các máy ATM đầu cơ, nhưng tôi quan tâm đến việc theo đuổi nó vì lợi ích riêng của nó. –
Đây là lý do tại sao tôi cần điều này: Tạo một lớp một phần cho mã TypeDescriptor soạn sẵn. Tên thuộc tính được tạo động không thể xung đột với các thuộc tính được định nghĩa trên loại, vì vậy tôi cần danh sách các tên thuộc tính bên trong loại để thực hiện kiểm tra. Đây là mã soạn sẵn nhiều hơn và do đó đi trong codegen. Nó cũng là một ứng cử viên hoàn hảo cho tĩnh, vì nó không thay đổi.Vì vậy, tôi cần tạo một danh sách chứa các thuộc tính của kiểu hiện tại bên trong một hàm tạo tĩnh. Vâng, địa ngục, bây giờ tôi cần phải sử dụng dây ma thuật trong mẫu T4. – Will