using 用法介绍
using (SqlCommand cmd = new SqlCommand(SQLString, connection))
为什么使用上面的using 而不直接使用下述的来直接
SqlCommand cmd = new SqlCommand(SQLString, connection)
- 如果你需要使用一个对象,这个对象需要占用很多紧缺的资源,使用完成后需要马上释放掉的话,建议使用using语句
- 这样写是为了避免资源释放不及时导致的冲突或性能问题
- 这样写的话处是减少因为争抢资源发生冲突或性能问题的概率
- 以下为微软官方关于using语句的解释
where T:class,new()
public List<T> GetSomethingList<T> (int a,int b,string c) where T:class,new()
{
...
}
这表示GetSomethingList是个泛型方法,调用的时候需要确定T到底是什么类型,但这里类型T需满足 where T:class,new() 这个条件,
其中 where T:class,表示T必须是引用类型(而不是int等值类型,或者ValueType的其他子类),new()表示这个类型T还必须至少具备一个无参的构造函数(还可以有其他有参数的构造函数)。
如果对类型T只要求其中一个条件,可以写成
1) where T:class //表示T必须是引用类型
2) where T:new() //表示这个类型T还必须至少具备一个无参的构造函数
virtual作用
在C#中,virtual
是一个访问修饰符,主要用于表示成员方法(包括构造函数和属性)是可以被派生类重写的。当一个方法被标记为virtual
时,它会在基类中创建一个默认版本,而子类可以提供他们自己的实现(即覆盖该方法)。这种机制促进了代码的灵活性和继承性,因为子类可以根据需要改变或增强父类的行为。
以下是virtual
关键字的主要作用:
方法重写:允许子类在其自己的版本中修改基类的方法。这称为方法覆盖(Override),子类实例调用的是其自身版本而不是基类版本。
抽象方法声明:对于抽象类中的方法,如果方法体为空并且没有实现,就需要加上
virtual
和abstract
关键字,这是为了强制子类必须提供具体的实现。接口实现:当类实现接口时,接口中的虚方法也需要使用
virtual
关键字,即使类本身并不打算重写它们。方法的动态绑定:在运行时,虚拟方法的调用是基于实际的对象类型,而非引用类型,这就是所谓的动态绑定(晚绑定或 Duck Typing)。