我有一个为不同项目扩展的BaseConfig类。 BaseConfig类包含我们开发的任何项目中常见的方法。 BaseConfig就像这样设置(只是整个类的片段):
public abstract class BaseConfig<T> where T:BaseConfig<T>
{
#region Serialized Class Members
/// <summary>
/// The License key for this product
/// </summary>
public string LicenseKey;
/// <summary>
/// Database connection information
/// </summary>
public class Database
{
public String ServerName;
public String DatabaseName;
public bool IntegratedSecurity;
public String UserName;
public String Password;
public String ConnectionStringOptions;
}
public Database DatabaseInfo;
....
我们将此BaseConfig类与config.xml文件结合使用,该文件包含特定于客户的信息(如数据库信息)。
我想创建一个ConnectToSQL()的公共方法,可以由任何扩展BaseConfig的类调用。
重要提示:ConnectToSQL()将在BaseConfig以外的类中(类似于SQLConnectionClass(),但在同一个项目中)。
我需要设置一个方法:
private SqlConnection ConnectToSQL(Configuration.BaseConfig<T>.Database dbInfo)
然后被称为:
SqlConnection _conn = ConnectToSQL(databaseInfo);
其中databaseInfo来自扩展BaseConfig的类
但是,SqlConnection()抱怨'无法找到类型或命名空间类型T'。
任何人都知道如何设置此方法?
答案 0 :(得分:2)
在我看来Database
不应该在BaseConfig<T>
之内 - 它应该是顶级的。您 这就是问题所在 - 这些是两种有效且不同的类型,而您的方法参数并不能表达它们感兴趣的内容。
我还强烈建议使用属性而不是那些公共字段 - 并且可能使BaseConfig<Foo>.Database
类型不可变。
答案 1 :(得分:0)
这是你想要做的吗?
public abstract class BaseConfig<T> where T : BaseConfig<T>
{
/// <summary>
/// Database connection information
/// </summary>
public class Database
{
public String ServerName;
public String DatabaseName;
public bool IntegratedSecurity;
public String UserName;
public String Password;
public String ConnectionStringOptions;
}
public Database DatabaseInfo { get; set; }
public abstract SqlConnection ConnectToSQL(Database info);
}
public class MyConfig : BaseConfig<MyConfig>
{
public override SqlConnection ConnectToSQL(Database info)
{
...
}
}
class Program
{
static void Main(string[] args)
{
var cfg=new MyConfig();
cfg.ConnectToSQL(cfg.DatabaseInfo);
}
}