2013-03-13 37 views
6

Tôi biết nó có thể không đáng giá nhưng chỉ vì mục đích giáo dục mà tôi muốn biết nếu có cách nào để chèn từ khóa của riêng bạn vào các ngôn ngữ .NET.Có thể thêm từ khóa vào C# hoặc VB.NET không?

Ví dụ: tôi nghĩ tốt khi có từ khóa C++ asm trong C#.
Hãy nhớ rằng tôi không nói về cách triển khai từ khóa asm mà là cách tổng quát để thêm từ khóa vào C#.

đang tưởng tượng của tôi:

asm{ 
    mov ax,1 
    add ax,4 
} 

Vậy là có một cách để đạt được điều này?
Các câu trả lời bao gồm việc thực hiện keyword{ } phù hợp với đủ cho câu hỏi này.

+8

Chỉ khi bạn sẵn sàng viết trình biên dịch C# của riêng bạn. –

+0

Cách duy nhất tôi biết là gán bí danh cho các loại đã biết. –

+0

Tôi nghĩ rằng điều này cần một số biến thể của một thẻ "Ngôn ngữ trung gian" ... tất cả .NET chuyển sang mã IL – LamonteCristo

Trả lời

4

Hiện tại, điều này là không thể. Tuy nhiên, có một dự án của Microsoft đang phát triển được gọi là Roslyn có thể được tóm tắt là "trình biên dịch như một dịch vụ". Nó cho phép bạn, trong số những thứ khác, để mở rộng hoặc sửa đổi hành vi của trình biên dịch thông qua một API.

Khi Roslyn có sẵn, tôi tin rằng điều này nên là một cái gì đó (cẩn thận!) Là khá khả thi.

+0

+1 Thông tin thú vị. – SysDragon

+0

Kể từ khi Roslyn được phát hành, bất cứ ai có thể cung cấp câu trả lời tốt hơn (cập nhật) ngay bây giờ không? –

2

Rất tiếc, điều này là không thể. Bạn không thể mở rộng hoặc thay đổi ngôn ngữ theo bất kỳ cách nào.

Bạn có thể sử dụng PostSharp một cách mơ hồ để đọc và phân tích chuỗi và chuyển đổi chúng thành mã tùy chỉnh tại thời gian biên dịch (bộ xử lý trước). Nhưng bạn sẽ không nhận được rất hạnh phúc với điều đó, vì nó là rất dễ bị lỗi và bạn sẽ không nhận được bất kỳ loại intellisense hoặc mã hoàn thành cho dây ma thuật của bạn.

0

Theo MSDN từ khóa được xác định trước và không thể thay đổi. Vì vậy, bạn không thể thêm bất kỳ, bởi vì bạn sẽ cần phải nói cho trình biên dịch làm thế nào để xử lý chúng. Insofar, không bạn không thể.

2

Bạn có thể sử dụng bất kỳ công cụ nào bạn muốn xử lý trước mã của mình trước khi gửi cho trình biên dịch C#. Ví dụ: bạn có thể sử dụng các macro VS để thực hiện xử lý trước, ánh xạ một cú pháp đã cho mà bạn đã phát minh thành một cái gì đó mà làm biên dịch thành mã C#, có thể tạo ra lỗi nếu có sự cố. Nếu các macro VS không đủ mạnh cho bạn thì bạn luôn có thể sử dụng IDE của riêng bạn mà làm bất cứ điều gì bạn mã nó làm với văn bản trước khi gửi nó đến trình biên dịch.

Không có hỗ trợ được xây dựng trong trình biên dịch để chỉ định từ khóa/cú pháp của riêng bạn; bạn sẽ cần phải xử lý nó hoàn toàn độc lập với trình biên dịch.

+0

Chưa có, nhưng sẽ sớm có - Roslyn sẽ cho phép bạn sửa đổi hành vi của trình biên dịch nếu bạn chọn. Các mẫu tôi đã nhìn thấy cho đến nay là ... tốt, khá đáng sợ, chủ yếu! ;-) –

+0

Làm thế nào buồn là các macro được gỡ bỏ kể từ VS 2012 – Apocatastasis

+1

@Apocatastasis Vâng, bạn có thể sử dụng một bổ sung, hoặc một số hình thức khác của một phần mở rộng, ngay cả khi nó không giống hương vị của các macro. – Servy

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