在抽象类中使用构造函数
本文关键字:构造函数 抽象类 | 更新日期: 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();
}
...