分类:Web编程
共 938 篇
使用非托管资源的类型必须实现IDisposable接口的Dispose()方法来精确的释放系统资源。.Net环境的这一规则使得释放资源代码的职责是类型的使用者,而不是类型或系统。因此,任何时候你在使用一个有Dispose()方法的类型时,你就有责任来调用Dispose()方法来释放资源。最好的方法来保证Dispose()被调用的结构是使用using语句或者try/finally块。 所有包含非托管资源的类型应该实现IDisposable接口,另外,当你忘记恰当的处理这些类型时,它们会被动的创建析构函数。如果你忘记处理这些对象,那些非内存资源会在晚些时候,析构函数被确切调用时得到释放。这就使得这些对象在内存时待的时间更长,从而会使你的应用程序会因系统资源占用太多而速度下降。 幸运的是,C#语言的设计者精确的释放资源是一个常见的任务。他们添加了一个关键字来使这变得简单了。…
📂 Web编程
👤 博主
📅 2009-07-31
👁 5006
👍 0
阅读全文 →
写构造函数是一个反复的工作。很多开发人员都是先写一个构造函数,然后复制粘贴到其它的构造函数里,以此来满足类的一些重载接口。希望你不是这样做的,如果是的,就此停止吧。有经验的C++程序可能会用一个辅助的私有方法,把常用的算法放在里面来构造对象。也请停止吧。当你发现多重构造函数包含相同的逻辑时,取而代之的是把这些逻辑放在一个常用的构造函数里。你可以得避免代码的重复的好处,并且构造函数初始化比对象的其它代码执行起来更高效。C#编译器把构造函数的初始化识别为特殊的语法,并且移除预置方法中重复的变量和重复的基类构造函数。结果就是这样的,你的对象最终执行最少的代码来合理的初始化对象。你同样可以写最少的代码来把负责委托给一个常用的构造函数。构造函数的预置方法充许一个构造函数调用另一个构造函数。这是一个简单的例子: C#不支持带默认值的参数,C++是很好的解决这个问题的(译注:C++可以让参数有默认的值,从而有效的减少函数的重载)。你必须重写每一个特殊的构造函数。对于这样的构造函数,就意味着大量的代码重复工作。可以使用构造函数链来取代常规的方法。下面就是一些常规的低效率的构造函数逻辑: 这个版本看上去是一样的,但生成的效率远不及对象的其它代码。为了你的利益,编译器为构造函数添加了一些代码。添加了一些代码来初始化所有的变量(参见原则12)。它还调用了基类的构造函数。当你自己写一些有效的函数时,编译器就不会添加这些重复的代码了。第二个版本的IL代码和下面写的是一样的:…
📂 Web编程
👤 博主
📅 2009-07-30
👁 5675
👍 0
阅读全文 →
使用SqlDataSource控件删除记录出错,提示: 您已指定 删除 命令比较 SqlDataSource“SqlDataSource1”的所有值,但为 values 传入的字典是空的。请为 删除 传入有效的字典或将模式更改为 OverwriteChanges。 解决方法:在配置数据源时,在高级 SQL 生成选项中,不钩选"使用开放式并发"。 Default.aspx: Default.aspx.cs:
📂 Web编程
👤 博主
📅 2009-07-30
👁 7003
👍 0
阅读全文 →
(译注:initializer在上文中译为了“初始化器”,实在不好听,本文中全部改译为:“预置方法”) 你应该知道,在一个类型的任何实例初始化以前,你应该初始化它的静态成员变量。在C#里你可以使用静态的预置方法和静态构造函数来实现这个目的。一个类的静态构造函数是一个与众不同的,它在所有的方法,变量或者属性访问前被执行。你可以用这个函数来初始化静态成员变量,强制使用单件模式,或者实现其它任何在类型的实例可用前应该完成的工作。你不能用任何的实例构造函数,其它特殊的私有函数, 或者任何其它习惯方法来初始化一个 变量(译注:编译器就不让你这样做,所以你不用担心这样的问题)。 和实例的预置方法一样,你可以把静态的预置方法做为静态构造函数可替代的选择。如果须要简单的分配一个静态成员,就直接使用初始化语法。当你有更复杂的逻辑来初始化静态成员变量时,就创建一个静态构造函数:…
📂 Web编程
👤 博主
📅 2009-07-29
👁 4568
👍 0
阅读全文 →
(译注:根据我个人对文章的理解,我把initializer译为:初始化器,它是指初始化语法,也就是在一个类里声明变量的同时,直接创建实例值的方法。 例:object m_o = new object();如果这段代码不在任何函数内,但在一个类里,它就是一个初始化器,而不管你是把它放在类的开始还以结尾。) 一些类经常不只一个构造函数。时间一长,就难得让它的成员变量以及构造函数进行同步了。最好的确保这样的事不会发生的方法就是:在声明的时候就直接初始化,而不是在每个构造函数内进行赋值。而且你应该使用初始化器语法同时为静态的和实例的变量进行初始化。 在C#里,当你声明一个变量时就自然的构造了这个成员变量。直接赋值:…
📂 Web编程
👤 博主
📅 2009-07-28
👁 5395
👍 0
阅读全文 →
要让IIS支持Python编写的脚本,前提是得在IIS上安装Python脚本引擎,这边建议安装ActivePython 2.6.2,它是一个不错的Python开发IDE,安装ActivePython时会自动在IIS安装Python脚本引擎。 下边是用Python编写的一个ASP页面: Rectangle.py: 说明:Rectangle.py必须放在sys.path其中一个路径中,否则程序运行会出错,提示:ImportError: No module named Rectangle!
📂 Web编程
👤 博主
📅 2009-07-27
👁 4688
👍 0
阅读全文 →
Person.py模块内容如下: 在IDLE中报错: 原因分析: Python导入模块的方法有两种:import module 和 from module import,区别是前者所有导入的东西使用时需加上模块名的限定,而后者不要。 正确的代码: 或
📂 Web编程
👤 博主
📅 2009-07-27
👁 6840
👍 0
阅读全文 →
先编写一个类Person: 下边声明两个实例,并输出属性: 是不是有些奇怪怎么Person.Age的值也是18,那类中的Age到底是实例属性还是类属性?我们再输出各实例成员信息看看: 可见类中的Age应是类属性,而获取实例属性时实际上是获取类属性的值。 再做个测试: 测试说明:仅当对实例属性赋过值后,实例属性才真正存在,未对实例属性赋值前,获取实例属性值时将获取同名类属性的值! 下边对类属性赋值,再看下结果: person1.Age为实例属性值,person2.Age和Person.Age均为类属性的值。 再来看一个例子: 从测试结果可知: 在类中声明的变量皆为类属性,只有给self设置的属性才为实例属性。当获取一个实例属性值时,若在类中有定义该实例属性,则返回实例属性值;若在类中没有定义该实例属性,则返回同名类属性值,若没有同名类属性,则报错。…
📂 Web编程
👤 博主
📅 2009-07-26
👁 5677
👍 0
阅读全文 →
下边是一个简单的Python类: 调用示例: 说明: ·每个实例方法的第一个形参都必须预留给实例对象,但在调用时可省略此参数; ·__init__是Python特殊的方法,用来初始化类实例,类似的方法还有__del__、__getitem__等; 类继承
📂 Web编程
👤 博主
📅 2009-07-26
👁 4189
👍 0
阅读全文 →
下边是一个简单的Python函数定义: 说明:注意Python代码块是通过代码缩进区分的,缩进在Python非常重要! ·普通调用方式,形参和实参位置一一对应: ·使用关键参数,形参和实参位置可不需对应: Python函数定义的时候还可以为参数指定默认值,带默认值的形参在调用时可以省略: 说明:带默认值的形参必须放在没有默认值的形参后面! Python函数形参前边还可以使用*和**前缀: 可以看出: *允许传任意多个实参,这些实参最终被合并成一个元组进行处理; **也允许传任意多个实参,这些实参在函数中当作字典来处理;
📂 Web编程
👤 博主
📅 2009-07-26
👁 4220
👍 0
阅读全文 →