gpt4 book ai didi

c# - 从派生类覆盖公共(public)属性

转载 作者:太空狗 更新时间:2023-10-29 20:57:07 25 4
gpt4 key购买 nike

在一个旧项目中,我们正在使用第三方程序集,该程序集的类具有一些硬编码信息的属性:

public string ConnectionString
{
get
{
string[] fullDbName = new string[5];
fullDbName[0] = "Data Source=";
fullDbName[1] = this.dbServer;
fullDbName[2] = ";Initial Catalog=";
fullDbName[3] = this.FullDbName;
fullDbName[4] = ";Integrated Security=SSPI;Pooling=false";
return string.Concat(fullDbName);
}
}

我需要能够自己构建连接字符串。所以我试图制作一个隐藏原始属性的派生类,但它似乎不起作用:

public class SqlServerRestorerExstension : SQLServerRestorer
{
public SqlServerRestorerExstension(string dbServer, string dbName, string dbFilePath, string dbDataFileName, string dbLogFileName, bool detachOnFixtureTearDown, string connectionstring) : base(dbServer, dbName, dbFilePath, dbDataFileName, dbLogFileName, detachOnFixtureTearDown)
{
ConnectionString = connectionstring;
}

public string ConnectionString { get; private set; }
}

当我无法访问第三方代码时,是否可以通过任何方式实现此目的?

最佳答案

正如其他人所指出的,您可以使用 new 关键字来隐藏基本成员属性。但是请注意,这不会神奇地将 ConnectionString 属性转换为多态函数,即如果您有这样的东西:

public class A 
{
public string CString { get { return "a"; } }
}

public class B : A
{
public new string CString { get { return "b"; }}
}

然后你这样做:

A a = new B();

Console.WriteLine(a.CString);

然后你仍然会看到一个“a”打印到控制台。事实上,new 关键字只是阻止编译器发出有关隐藏基类成员的警告。它不会在运行时更改代码的行为。

您可以尝试使用装饰器模式并包装 SQLServerRestorer,但如果这也不起作用,恐怕您就不走运了。

关于c# - 从派生类覆盖公共(public)属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9179044/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com