2011-07-01 32 views
6

Tôi biết rằng tôi có thể sử dụng các tệp Lua Script để thao tác các đối tượng Java bằng cách sử dụng các thư viện như LuaJava. Tôi đã có ý tưởng về việc sử dụng tập lệnh C# thay vì ~C# Scripting bên trong Java

Có thể chạy tập lệnh C# bên trong Java không?

+0

C# không phải là thực sự là một "kịch bản" ngôn ngữ . – StriplingWarrior

+0

Đối với vấn đề đó, nghiêm túc nói không phải là Java. Javascript là, Java không phải là, và không có "C# script" đối tác. –

+2

@StriplingWarrior [Tất nhiên rồi!] (Http://www.doolwind.com/blog/why-you-should-use-csharp-for-your-scripting-language/) – Justin

Trả lời

6

Về lý thuyết, có - bạn chắc chắn có thể thực hiện việc này trong các ứng dụng .NET và có Java/.Net interops. Thông thường tuy nhiên Java/C# interops được thực hiện thông qua P/Invoke hoặc COM - cả hai đều khá cồng kềnh cho loại điều này và vì vậy trong thực tế này có lẽ sẽ không hoạt động như gọn gàng như bạn có thể tưởng tượng.

Nếu bạn muốn thực hiện điều này, tôi có thể khuyên bạn nên viết "công cụ tạo kịch bản" (tức là trình bao bọc xung quanh trình biên dịch C#) trong C#, và sau đó đưa nó vào vùng Java qua các lần ngắt, ví dụ:

public ScriptResult(string Script) 
{ 
    // Implemented in .Net 
    // Script is a string containing the C# code to execute 
} 

sau đó bạn cần phải suy nghĩ cẩn thận về cách kịch bản C# của bạn sẽ có thể truy cập bất kỳ chức năng Java-đất, một lần nữa tôi tưởng tượng ra cách tốt nhất là để thực hiện một lớp wrapper Net mà gọi các đối tượng Java thông qua interops.

Sử dụng C# là một ngôn ngữ kịch bản từ bên trong một ứng dụng Net là đáng ngạc nhiên đơn giản - để biết thông tin xem:

2

Chương trình C# có phải là "tập lệnh" không? Bất kể, bạn có thể chạy hầu hết tất cả các chương trình bên ngoài thông qua Runtime.exec (...), nhưng hãy nhớ xem bẫy: When Runtime.exec() won't.

Mọi thứ trở nên phức tạp hơn một chút nếu bạn muốn có liên lạc hai chiều giữa C# và Java, có thể thực hiện thông qua các khe cắm/luồng đơn giản hoặc tất cả các cách lên đến các giao diện COM.

2

Bạn có thể thực hiện theo cách khác. Hãy xem http://www.ikvm.net/ - nó cho phép tái sử dụng thư viện/đối tượng từ một ngôn ngữ trong ngôn ngữ khác.