在抽象类中使用构造函数

本文关键字:构造函数 抽象类 | 更新日期: 2023-09-27 18:14:06

我有一个类如下:

public abstract class cDBBase
{
     public cDBBase()
     {
         some codes
      }
      Some codes;
 }

我有另一类

public class cSQL : cDBBase
{
     public void cSQL()
     {
         Some codes;
     }
}

为什么在子类构造函数上出现错误"成员名称不能与其封闭类型同名"?

以下是完整的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Uploader
{
    public abstract class cDBBaseClass
    {
        public string ServerName { get; set; }
        public string DBName { get; set; }
        public string UserName { get; set; }
        public string Password { get; set; }
        public string ConnString;
        public cDBBaseClass(string serverName, string dBName, string userName, string password)
        {
            ServerName = serverName;
            DBName = dBName;
            UserName = userName;
            Password = password;
        }
        public abstract string SetConnString();
        public abstract void SetConn();
    }
}

和子类

    using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Data;

namespace Uploader.Classes
{
    public class cSQL:cDBBaseClass
    {
        private SqlConnection Conn = new SqlConnection();
        public cSQL()
        {
            SetConnString();
            SetConn();
        }

        public override string SetConnString()
        {
            return "data source = " + this.ServerName +
                   "; database = " + this.DBName +
                   "; User ID = " + this.UserName +
                   "; Password = " + this.Password;
        }
        public override void SetConn()
        {
            Conn.ConnectionString = this.ConnString;
        }
        public SqlDataReader ExecSQL(string Query)
        {
            using (SqlConnection Conn = new SqlConnection(SetConnString()))
            {
                Conn.Open();   
                SqlCommand cmd = new SqlCommand(Query , Conn);
                return cmd.ExecuteReader();
            }
        }

        public SqlDataReader ExecStoredProcedure(string SPName)
        {
            using (SqlConnection Conn = new SqlConnection(SetConnString()))
            {
                Conn.Open();
                SqlCommand cmd = new SqlCommand(SPName, Conn);
                cmd.CommandType = CommandType.StoredProcedure;
                return cmd.ExecuteReader();
            }
        }

    }
}

在抽象类中使用构造函数

您正在定义一个方法cSQL,该方法与它所包含的类具有完全相同的名称。您不能这样做。你是不是打算做一个构造函数?只需移除void

tnw确实解决了您最初的问题,但要解决其他问题,您的类必须接受与基类相同的参数,并将它们传递给它:

public class cSQL : cDBBaseClass
{
    private SqlConnection Conn = new SqlConnection();
    public cSQL(string serverName, string dBName, string userName, string password)
        : base(serverName, dBName, userName, password)
    {
        SetConnString();
        SetConn();
    }
    ...