我看到别人的一个工程,.Net的主程序,在程序中,可以load不同的.vb(或.cs)文本,然后主程序就表现出不同的特性(以背景颜色改变为例,假设主程序为一个窗口,带有一个'loadbutton'用以调用不同的.cs文本,调用red.cs文件时,主窗口的背景颜色会被显示为红色,调用green.cs文本时候,主窗口背景会被显示为绿色)
当然,.cs文件需要有一些规则,比如必须具备一些公共变量,必须具有某种签名的方法(如:public void ScriptMain()方法,所有的.cs文件都需要具有),主程序load文件之后,执行也是依照一定的顺序,比如前面提到的,所有的.cs文件在被加载之后都由ScriptMain()方法开始执行。请问这样的要求应该如何实现呢(这里并不是讨论可能性,因为我已经看到别人现成的程序已经可以实现,功能比较强大,想了解下原理)? 请大家指教,谢谢(另外改变背景颜色只是一个举例,当然可以实现需要的其它功能(其实也就是执行方法))。
当然,.cs文件需要有一些规则,比如必须具备一些公共变量,必须具有某种签名的方法(如:public void ScriptMain()方法,所有的.cs文件都需要具有),主程序load文件之后,执行也是依照一定的顺序,比如前面提到的,所有的.cs文件在被加载之后都由ScriptMain()方法开始执行。请问这样的要求应该如何实现呢(这里并不是讨论可能性,因为我已经看到别人现成的程序已经可以实现,功能比较强大,想了解下原理)? 请大家指教,谢谢(另外改变背景颜色只是一个举例,当然可以实现需要的其它功能(其实也就是执行方法))。
// codes of the red.cs file:
public void Main()
{
// calculation
Calculation();
// display
Display();
// reports
ShowReports();
}
private void Calculation()
{
// lots of operations, even the communication with hardware...
}
private void Display()
{
// specifical displays...
}但是另一个文件可能具备截然不同的功能:
// codes of the green.cs file:
public void Main()
{
// calculation
Calculation();
// display
Display();
// reports
ShowReports();
// save the datas to DB
SaveDatas();
}
private void Calculation()
{
// other lots of operations, even the communication with hardware...
}
private void Display()
{
// other specifical displays...
}
private bool SaveDatas()
{
// save datas and so on...
// return result
}
类似上边这样,当然实际应用的时候,框架所实现的功能肯定是特定的,比如只是用来逐行显示信息,并带有和硬件不同的通信等,但是我想知道的是框架是如何实现对.cs文件的load,并可以直接执行.cs中的方法的(并不是对dll文件的使用,那直接反射就可以了)。
这种功能在特定框架的强大之处在于,基本功能已经被框架实现了(比如说前面说的逐行显示功能),但是具体执行的方法是由.cs文件决定的,同样以逐行显示为例吧(加入我的框架就是用来逐行显示的),我可以在A.cs中,逐行显示某一个特定DB中的table的数据,而另一个B.cs中,可能是每一行的数据需要user先输入,然后我进行一个处理,再显示,最后再保存到DB中。
A.cs与B.cs的最终目的都是为框架提供逐行显示,但是具体实现方式不同(如前所示)
这样做有很多现实意义:
1.我们可以随意的(当然是在特定目的内)编辑自己需要的.cs文件(当然是要遵循一定的格式要求,比如前面说过的,要包含 void ScriptMain()这样签名的方法)。
2. 在更改.cs文件之后之需要用主框架程序load这个.cs文件,变化就体现出来了,但是总体的表现方式不变(逐行显示),便于二次开发使用。
3. 甚至之后可以加入调试功能,方便调试,并且省去每个user的电脑上都安装vs(涉及到费用和权限等等诸多问题)。
好多好多。
因此我想问问大家又无什么思路,看看到底是怎么实现的,我这边已经见到这样的软件了,只是不知道到底是怎么开发的(而且开发好像难度不应该非常非常大,因为开发者并不不是专业的软件工程师...)
非常感谢大家指点。
百度来的,好像不是这么回事哦,而且评价不咋地哦