C# 控制在基础项目中创建类的哪个实例
我有一个无法进行更改的基础项目,因此我创建了自己的扩展基础的项目 所以在基地里有,比方说C# 控制在基础项目中创建类的哪个实例,c#,oop,overriding,virtual,extending,C#,Oop,Overriding,Virtual,Extending,我有一个无法进行更改的基础项目,因此我创建了自己的扩展基础的项目 所以在基地里有,比方说 public class ClassA { public int NumberOfPeople = new BaseConstans().GetNumberOfPeople } 然后,BaseConstants如下所示: public class BaseConstants { int _numberOfPeople = 5; public virtual int GetNumb
public class ClassA
{
public int NumberOfPeople = new BaseConstans().GetNumberOfPeople
}
然后,BaseConstants
如下所示:
public class BaseConstants
{
int _numberOfPeople = 5;
public virtual int GetNumberOfPeople
{
get
{
return _numberOfPeople;
}
}
}
在我的项目中,我有:
public class ProjectConstants : BaseConstants
{
int _numberOfPeople = 10;
public override int GetNumberOfPeople
{
get
{
return _numberOfPeople;
}
}
}
那么,在运行我的项目时,我需要做什么才能调用我的ProjectConstants
,但仍然允许使用base的人调用BaseConstants
?我希望有办法做到这一点
PS:这是一个简化的示例请尝试执行以下代码行
ProjectConstants pc= new ProjectConstants();
console.WriteLine(pc.GetNumberOfPeople());// this will call the extended class's method
ClassA ca= new ClassA();
console.WriteLine(ca.GetNumberOfPeople());// this will call the class A's method
遗憾的是,如果您不能使用
BaseConstants
修改包含类的项目的源代码,您将无法强制它使用ProjectConstants
该基类需要如下所示来支持您的场景:
public class ClassA
{
public ClassA(BaseConstants constants)
{
Constants = constants;
}
private BaseConstants Constants { get; }
public int NumberOfPeople => Constants.GetNumberOfPeople();
}
在这次植入中,我可以将
ProjectConstants
转换为BaseConstants
,这样GetNumberOfPeople
将返回5而不是10
class BaseConstants
{
public int GetNumberOfPeople { get; set; } = 5;
}
class ProjectConstants:BaseConstants
{
public new int GetNumberOfPeople { get; set; } = 10;
}
在这里,我们怎样才能施放到基类呢
var pc = new ProjectConstants ();
Console.WriteLine(pc.GetNumberOfPeople); // => 10
Console.WriteLine((pc as BaseConstants).GetNumberOfPeople); // => 5
这会解决你的问题
newprojectconstans().GetNumberOfPeople
?也请将此方法设置为静态GetNumberOfPeople
,这样您就可以消除实例化,如果您的意思是希望ClassA
调用ProjectContants.GetNumberOfPeople
而不是BasConstants.GetNumberOfPeople
,那么您只能通过修改ClassA
如果我正确地阅读了你的答案,你就没有访问权限,因此,你不能这样做。@juharr。好吧,那我得另找一个解决办法。非常感谢。我可能错了,但我认为OP希望ClassA
使用ProjectConstants
@juharr是的,我认为是这样