G#是一种基于.Net平台的一门新的语言, 它可以在编译期以及运行期为原有的代码注入新的代码. 并且新的代码同样能保证.net平台下的类型安全性.
和CodeSmith不同的是 它的代码生成技术是为已有的代码添加新的功能, 也就是目前AOP技术所要实现的目标.
如果你使用过Aspectj就会发现它语法的丑陋, 而G#的语法是C#2.0的一个子集,看上去非常的容易理解.并且G#是基于.Net的IL语言的,所以无论是C#还是VB.Net都可以发挥它的威力.
来看一个小例子,你就会发现G#的优美之处.
public class Client
{
public Client()
{
Messenger(“Hello World”);
}
private void Messenger(string message)
{
Console.WriteLine(message);
}
}
public generator Rename
{
static generation ChangeIt : target Client.Messenger(string message)
{
pre
{
string oldMessage = message;
message = “Hello G#”;
}
post
{
message = oldMessage;
}
}
}
{
public Client()
{
Messenger(“Hello World”);
}
private void Messenger(string message)
{
Console.WriteLine(message);
}
}
public generator Rename
{
static generation ChangeIt : target Client.Messenger(string message)
{
pre
{
string oldMessage = message;
message = “Hello G#”;
}
post
{
message = oldMessage;
}
}
}
再看看利用G#注入后的新的代码:
private void Messenger(string message)
{
// From ChangeIt pre block.
string oldMessage = message;
// From ChangeIt pre block.
message = “Hello G#”;
// From the Messenger method body.
Console.WriteLine(message);
// From ChangIt post block.
message = oldMessage;
}
{
// From ChangeIt pre block.
string oldMessage = message;
// From ChangeIt pre block.
message = “Hello G#”;
// From the Messenger method body.
Console.WriteLine(message);
// From ChangIt post block.
message = oldMessage;
}
有关G#的具体信息请访问这里。