8

Bạn đã sử dụng các thuộc tính .NET tùy chỉnh nào trong thế giới thực?Sử dụng các thuộc tính .NET tùy chỉnh trong thế giới thực

Tôi đã đọc một số bài viết về chúng, nhưng tôi chưa bao giờ sử dụng các thuộc tính tùy chỉnh.

Tôi cảm thấy mình có thể nhìn thấy chúng khi chúng hữu ích.

Tôi đang nói về các thuộc tính mà bạn tạo, chứ không phải những thuộc tính đã được bao gồm trong khung công tác.

+2

Dưới đây là cách các SOFlow khác sử dụng chúng: http://www.google.com/#hl=vi&q=site%3Astackoverflow.com+.net+custom+attribute&aq=f&oq=&aqi=&fp=leBsIIJAIN0 – Sampson

Trả lời

4

Tôi đã sử dụng các thuộc tính "tùy chỉnh" để xác thực một trường nhất định).

Mã xác nhận, ví dụ, sẽ giống như thế này:

public class Customer 
{ 
    [CreditCardValidator] 
    string creditCardNumber; 

    [AddressValidator] 
    string addressLineOne 
} 

Khi các đối tượng trên được xác nhận, từng lĩnh vực được xác nhận với nhờ validator phù hợp với thuộc tính "tùy chỉnh".

Trong công cụ LinqToLucene tôi đã viết thuộc tính tùy chỉnh là tốt đẹp vì chúng cho phép bạn tìm (thông qua sự phản ánh) các trường cụ thể tại thời gian chạy. Ví dụ: nếu bạn có đối tượng khách hàng, bạn có thể quan tâm đến việc nhận tất cả các thuộc tính đã được đánh dấu là "lập chỉ mục cho tôi": thuộc tính tùy chỉnh cho phép bạn thực hiện điều này dễ dàng vì nó cho thấy siêu dữ liệu về đối tượng theo cách rất dễ truy vấn.

0

Tôi đã phải sắp xếp một số đối tượng thành định dạng tùy chỉnh (kế thừa) và tôi đã sử dụng các thuộc tính để xác định trường nào sẽ được tuần tự hóa và cách định dạng chúng. Sau đó, tôi đã có một serializer có thể mất bất kỳ đối tượng với các thuộc tính này và sử dụng sự phản ánh để định dạng nó.

+0

Bạn đã biết ' t thực sự sử dụng các thuộc tính tùy chỉnh của riêng bạn, phải không? –

+0

heeeeeeeeeeeeee – abmv

0

Tôi đã sử dụng nó trong một trong các khung công tác ORM mà tôi đã phát triển dựa trên mẫu ActiveRecord. Đây là loại triển khai tương tự có sẵn trong LINQ, dự án Lâu đài, v.v.

Khung được gọi là "SkyFramework", nhưng nó không phải là nguồn mở.

ví dụ: Chỉ là một ví dụ sơ bộ ...

Bạn cũng sẽ tìm thấy các ví dụ tương tự trong các dự án mã nguồn mở khác.

[Sky.Table ("user")] 
public class User 
{ 
    [Sky.Column ("username")] 
    public string UserName; 

    [Sky.Column ("pwd")] 
    public string Password; 
} 

Chú ý: Thuộc tính "Bảng", "Cột" là thuộc tính tùy chỉnh tại thời điểm đó.

Động cơ ActiveRecord phân tích các đối tượng cho các thuộc tính và tạo ra các chức năng tương ứng cho CRUD ... vv ...

Tương tự như vậy, tôi đã phát triển các thuộc tính một số tùy chỉnh để xác định các phần của mã mà cần phải được làm chuẩn. ..cho ví dụ:

[Sky.BenchMark()] 
public void LongRunningMethod(..) 
{ 
} 

Các phương pháp được đánh dấu với các thuộc tính trên được đánh dấu tự động và nhật ký được tạo. Đây là một số triển khai trước đó.

Có sách Apress có sẵn về chủ đề .. Applied .NET Attribues có thể giúp bạn.

+0

Bạn đã viết các thuộc tính chưa? –

+0

Bảng, Cột, BenchMark vv là các đối tượng bắt nguồn từ lớp Thuộc tính. Bên cạnh đó các công cụ phân tích cú pháp sẽ xử lý nó. Các đối tượng này luôn được khởi tạo bởi một số lớp nhà máy, để bạn có thể nhận được một móc nối vào các phương thức. –

+0

Và xin đừng nhầm lẫn với các thuộc tính tương tự cho LINQ mà bạn có bây giờ. Đây là một đoạn mã cũ với các thuộc tính nằm trong không gian tên riêng của nó. –

1

Trong số những thứ khác, tôi đã sử dụng chúng để chỉ định EBNF được đọc vào thời gian chạy để tạo trình phân tích cú pháp tùy chỉnh và cũng chỉ định siêu dữ liệu về trường cho cơ sở dữ liệu.

Tôi tìm thấy một 'mẫu' Tôi thường sử dụng thuộc tính tùy chỉnh là thay thế enums đặc biệt là khi có sự phụ thuộc vào enum ở những vị trí khác nhau trong mã.

Ví dụ: Tôi có thể có một enum cho một trạng thái của một đối tượng. Dựa trên trạng thái này, tôi có thể có 3 hoặc 4 vị trí khác nhau trong mã mà tôi sẽ thực hiện 'công tắc' của enum đó và thực hiện một số thao tác. Một số nhà phát triển khác có thể dễ dàng giới thiệu một lỗi bằng cách thêm một enum mới nhưng không xử lý trong một trong các câu lệnh chuyển đổi ở nơi khác trong mã.

Vì vậy, để tránh điều này, tôi tạo một thuộc tính tùy chỉnh được khai báo cho một lớp tĩnh. Các thuộc tính tùy chỉnh được nạp trong hàm dựng tĩnh của lớp vào một từ điển và tất cả các vị trí trong mã sử dụng từ điển thay vì các câu lệnh chuyển đổi. Hàm tạo thuộc tính tùy chỉnh chứa các giá trị 'mã hóa cứng' cho mỗi câu lệnh switch.

5

Tôi đã tạo một công cụ tạo tập lệnh và gắn thẻ các phương thức khác nhau bằng thuộc tính [Command]. Điều này có nghĩa rằng các chức năng này đã được tiếp xúc với các công cụ kịch bản.

Ví dụ:

[Command(HelpText = "Lists active users")] 
void ListUsers(void) 
{ 

} 

[Command(HelpText = "Terminate a specific user's connection")] 
void EndConnection(int userID) 
{ 

} 

Và như được sử dụng:

MyScriptEngine>> Help 
Available Commands are: 
    ListUsers: Lists active users 
    EndConnection {userID}: Terminate a specific user's connection 

MyScriptEngine>> EndConnection 3 
    User 3 (Michael) has had his connection terminated. 

MyScriptEngine>> 
0

tôi đã không thực sự tìm thấy một sử dụng cho tùy chỉnh các thuộc tính như được nêu ra. Đã có một vài tình huống mà tôi thaught họ có thể thích hợp nhưng không sử dụng chúng bởi vì dường như sự phản ánh liên quan đến việc đọc các thuộc tính tùy chỉnh là khá tốn kém.

0

Tôi đã đặt thuộc tính tùy chỉnh trên các lớp trong DLL "plug-in". Điều này cho phép một khuôn khổ để tự động khám phá các trình cắm thêm có sẵn, đánh giá xem chúng có quan tâm hay không, và sau đó tải động các ứng dụng quan tâm.

Trong miền của chúng tôi, ví dụ là các trình cắm thêm mô hình các loại xe cụ thể trong một gia đình. Một plug-in cho một gia đình xe thực sự có thể mô hình hóa một số mẫu xe trong gia đình xe (ví dụ: "MX-6", "Probe"). Nếu ID hoặc Tên mẫu được bao gồm dưới dạng mảng thuộc tính tùy chỉnh, chúng tôi có thể nhanh chóng bỏ qua bất kỳ tệp DLL nào thậm chí không có thuộc tính tùy chỉnh và sau đó bỏ qua bất kỳ thuộc tính nào không mô hình phương tiện quan tâm.

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