首先要说明的是:抽象类中可以定义构造方法。
在之前认为:1,抽象类是不能实例化的;2,定义抽象类肯定是用来实例化的;3,抽象类中没有构造函数。
这三句话第一句肯定是正确的,第二句和第三句呢,定义抽象类一定要用来继承使用吗?抽象类中没有构造函数吗? (这两个问题会在下面详细解答)
就拿前段时间做的图书馆维修管理系统中SqlHelper说吧
代码如下:
/// <summary>
/// 数据访问抽象类
/// </summary>
public abstract class SqlHelper
{
//数据库连接字符串(web.config来配置),多数据库可使用DbHelperSQLP来实现.
public static string connectionString = ConnectionString;
///<summary>
///非查询操作
///</summary>
public static Boolean ExecuteSQL...
///<summary>
///查询操作
///</summary>
public static DateTable ExecuteQuery...
}
这样做有什么好处:1,抽象类直接使用省去了实例化。(分析内存知:类的实例化一要在堆中new出对象,二要在栈中分配空间指向堆中new出的对象),这两步都省去了。
2,抽象类中的静态方法是存在内存中的,用的时候直接去内存中去取,这样还是提高销量。
直接使用需注意的:抽象类中的方法必须为静态的。
class Program { static void Main(string[] args) { TestAbstract ta = new TestAbstract (); } } /// <summary> /// 定义抽象类 /// </summary> public abstract class BaseAbstract { } public class TestAbstract:BaseAbstract { public TestAbstract() { Console.WriteLine("子类方法"); } }
/// <summary> /// 定义抽象类 /// </summary> public abstract class BaseAbstract { /// <summary> /// 定义构造函数 /// </summary> public BaseAbstract() { Console.WriteLine("抽象方法"); } } public class TestAbstract:BaseAbstract { public TestAbstract() { Console.WriteLine("子类方法"); } }