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是的,我认为是这样