gpt4 book ai didi

派生类的 C# 转换

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

一个菜鸟问题...

我有两个类,一个普通的(父)类和一个专门的(子)类:

public abstract class BaseTest
{
public BaseTestSettings Settings{get;set;}
public abstract void Run();
}

public class BaseTestSettings
{
public double SettingsProp1{get;set;}
public double SettingsProp1{get;set;}
}

public class SpecializaedTestSettings : BaseTestSettings
{
public double SpecializaedTestSettingsPropA{get;set;}
public double SpecializaedTestSettingsPropB{get;set;}
}

public class SpecializaedTest : BaseTest
{
public SpecializaedTest()
{
this.Settings = new SpecializaedTestSettings();
}

public override void Run()
{
SpecializaedTestSettings settings = (SpecializaedTestSettings)this.Settings;
}
}

有没有办法避免在专门测试中重写 Run 方法?我想一个解决方案是在 SpecializedTest 类中定义 SpecializedTestSettings 类型的 Settings 属性,但我的目标是避免这种情况并声明这些属性只有一次。我想我不能?

最佳答案

使用Generics :

public abstract class BaseTest<TSettings> where TSettings : BaseTestSettings
{
public TSettings Settings{get;set;}
public abstract void Run();
}

public class BaseTestSettings
{
public double SettingsProp1{get;set;}
public double SettingsProp1{get;set;}
}

public class SpecializaedTestSettings : BaseTestSettings
{
public double SpecializaedTestSettingsPropA{get;set;}
public double SpecializaedTestSettingsPropB{get;set;}
}

public class SpecializaedTest : BaseTest<SpecializaedTestSettings>
{
public SpecializaedTest()
{
this.Settings = new SpecializaedTestSettings();
}

public override void Run()
{
SpecializaedTestSettings settings = this.Settings;
}
}

如果您需要非泛型/协变版本,您可以编写协变接口(interface)或非泛型基类型。

关于派生类的 C# 转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29260392/

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