gpt4 book ai didi

C# 继承 : change field data type and value in derived class

转载 作者:太空宇宙 更新时间:2023-11-03 22:51:40 25 4
gpt4 key购买 nike

是否可以在派生类中更改基类字段数据类型和值,并仍然调用基类方法但使用派生类值?

示例代码:

public class class1 
{
protected DBContext DB { get; set; }

public A()
{
DB = new DBContext();
}

public virtual DBRecord find(int id)
{
return DB.DBRecord.Find(id);
}
}

public class class2 : class2
{
protected DifferentDBContext DB { get; set; }

public B()
{
DB = new DifferentDBContext();
}
}

然后我尝试用下面的代码调用该方法。

class2 x = new class2();
x.find(1); // calls the base class method with base class field values

根据发生的情况,它使用基类变量调用基类方法。我想知道是否可以在派生类中设置字段类型/值,然后调用基类方法?因为它们只是具有相同的实现,只是使用了不同的值。

到目前为止我所做的(我觉得是多余的)和工作。

public class class2 : class1 
{
//Other implementations omitted
public override DBRecord find(int id)
{
return DB.DBRecord.Find(id);
}
}

注意:这可能只是一个简单的 OOP 原则,但你知道,人们有时会对此感到困惑,就像我一样:-)

最佳答案

这样做的方法是在基类中使您的属性成为虚拟的:

public class class1 
{
protected virtual DBContext DB { get; set; }
...
}

然后在派生类中覆盖它:

public class class2 : class1
{
private DifferentDBContext DDB;
protected override DBContext DB
{
get { return DDB; }
set { DDB = value is DifferentDBContext ? (DifferentDBContext)value : null; }
}
}

这是假设 DifferentDBContext 是一个 DBContext

关于C# 继承 : change field data type and value in derived class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47124390/

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