这是因为你使用的URLRewriter.dll是不完整的,一般只有8k,而实际上完整的是URLRewriter.dll是20k。
详细可以参考
ASP.NET通过URLRewriter.dll和aspnet_isapi.dll实现伪静态为了进一步理解类的初始化过程,这里有必要进一步区分一下类的实例化(类实例)和类的对象实例化(对象实例),我们通常所说的实例化都是指对象实例化。
我们可以把类的使用简单分为三个过程:类加载,类实例化,对象实例化。
类的加载:由Java虚拟机根据需求将要用的类加载到内存中,让类的代码处于可用状态;对于解释型虚拟机来说,这个代码就直接可解释执行,而对于采用即时编译(JIT)技术来说,虚拟机一般会在方法第1次调用时将字节码编译成目标机器语言,而且是要多少编译多少。类的加载在一个程序运行期间一般只执行一次。
类实例化:其实实例化主要是为成员变量分配空间,代码本身当然无所谓实例化,都是公共的。类之所以要实例化主要是因为类可以拥有静态变量的缘故,必须为类的这些静态成员分配空间,并执行这些静态成员变量的初始化操作;类的实例化在一个程序运行期间,也只执行一次;另外需要注意的是类的加载可以从本地执行,也可以从远程获取,因为类的代码本质上来说也是一些数据(字符序列)。
对象实例化:类是一些具有共同特征和行为的对象的静态描述(一种数据类型),对象实例化就是将类作为模子为每个对象分配具体的内存空间形成独立的实体;当然,这里的分配空间主要是针对成员变量,成员方法都是些代码,是所有对象共有的,因此并不需要重新分配空间来保存一份代码的复制品。
上面的上个过程,后面的过程执行都需要前面的过程已经执行过。
对于类A来说,如果类A没有被加载,那么A.class的调用会导致类的加载,但不会导致类实例化。而Class.forName("A")的调用,不仅会执行类加载,还会执行类实例化。其实这个方法还有一个重载方法,可以指明是否进行类实例化,而且还可以指定是本地加载还是远程加载(利用ClassLoader)。
和Python语言与wxWidgetsGUI工具库一样,wxPython是开源软件。这意味着任何人都可以免费地使用它并且可以查看和修改它的源代码,或者贡献补丁,增加功能。
wxPython是跨平台的。这意味着同一个程序可以不经修改地在多种平台上运行。现今支持的平台有:32位微软Windows操作系统、大多数Unix或类Unix系统、苹果MacOS X。
下面使用wxpython编写一个简单的记事本程序,可以打开本地文件,编辑,保存。
#!/usr/bin/python
import wx
def OnOpen(event):
"""
Load a file into the textField.
"""
dialog = wx.FileDialog(None,'Notepad',style = wx.OPEN)
if dialog.ShowModal() == wx.ID_OK:
filename.SetValue(dialog.GetPath())
file = open(dialog.GetPath())
contents.SetValue(file.read())
file.close()
dialog.Destroy()
def OnSave(event):
"""
Save text into the orignal file.
"""
if filename.GetValue() == '':
dialog = wx.FileDialog(None,'Notepad',style = wx.SAVE)
if dialog.ShowModal() == wx.ID_OK:
filename.SetValue(dialog.GetPath())
file = open(dialog.GetPath(), 'w')
file.write(contents.GetValue())
file.close()
dialog.Destory()
else:
file = open(filename.GetValue(), 'w')
file.write(contents.GetValue())
file.close()
app = wx.App()
win = wx.Frame(None, title="Simple Editor", size=(600,400))
bkg = wx.Panel(win)
# Define a 'load' button and its label, bind to an button event with a function 'load'
loadButton = wx.Button(bkg, label='Open')
loadButton.Bind(wx.EVT_BUTTON, OnOpen)
# Define a 'save' button and its label, bind to an button event with a function 'save'
saveButton = wx.Button(bkg, label='Save')
saveButton.Bind(wx.EVT_BUTTON, OnSave)
# Define a textBox for filename.
filename = wx.TextCtrl(bkg)
# Define a textBox for file contents.
contents = wx.TextCtrl(bkg, wx.HSCROLL)
# Use sizer to set relative position of the components.
# Horizontal layout
hbox = wx.BoxSizer()
hbox.Add(filename, proportion=1, flag=wx.EXPAND)
hbox.Add(loadButton, proportion=0, flag=wx.LEFT, border=5)
hbox.Add(saveButton, proportion=0, flag=wx.LEFT, border=5)
# Vertical layout
vbox = wx.BoxSizer(wx.VERTICAL)
vbox.Add(hbox, proportion=0, flag=wx.EXPAND | wx.ALL, border=5)
vbox.Add(contents, proportion=1,
flag=wx.EXPAND | wx.LEFT | wx.BOTTOM | wx.RIGHT, border=5)
bkg.SetSizer(vbox)
win.Show()
app.MainLoop()程序运行测试如下:
这个例子是《Python基础教程》中的一个例子,并做了一些修改。虽然完成了基本的记事本功能,但是界面略显简单,而且代码也没有很好地遵循面向对象编程原则。