gpt4 book ai didi

c# - 通用 c# 属性类型

转载 作者:行者123 更新时间:2023-11-30 12:41:57 26 4
gpt4 key购买 nike

我有三个类,其中两个继承自基类,第三个我想根据应用程序的状态引用另外两个中的一个。

public class Batch
{
public Batch() { }
}

public class RequestBatch : Batch
{
public RequestBatch(string batchJobType) : base(batchJobType) { }

public override int RecordCount
{
get { return Lines.Count; }
}
}

public class ResponseBatch : Batch
{
public ResponseBatch(string batchJobType) : base(batchJobType) { }

public ResponseBatch(int BatchJobRunID)
{ }
}

有时我实例化了 Child1 的实例,有时我需要 Child2。但是,我有一个模型,我想传递我的应用程序以将所有内容保存在一个地方,但我想要一种方法来使包含 Child1 和 Child2 的属性通用,例如:

public class BatchJob {
public List<Batch> Batches { get; set; }
}

然后再做这个

public List<RequestBatch> GetBatches(...) {}

var BatchJob = new BatchJob();
BatchJob.Batches = GetBatches(...);

但是,编译器对我大喊大叫,说它不能将 Child1 隐式转换为(其基类型)Parent。

我在“= GetBatches(....”下看到红色波浪线,表示“无法将类型‘System.Collections.Generic.List’隐式转换为‘System.Collections.Generic.List’

有没有一种方法可以生成 Property,以便它可以采用任何 Parent 类型的抽象?

谢谢!

最佳答案

您显示的代码片段确实有效。没有编译错误:

class Program
{
static void Main()
{
var rj = new RunningJob();
rj.Property = new Child1();
rj.Property = new Child2();
}
}
public class RunningJob {
public Parent Property { get; set; }
}
public class Parent { }
public class Child1 : Parent { }
public class Child2 : Parent { }

此代码带来的唯一问题是 PropertyParent 类型。因此,您不能调用特定于 Child1/Child2 的方法。这可以通过对 RunningJob 类的泛型类型参数进行约束来完成:

public class RunningJob<TParent> where TParent : Parent
{
public TParent Property { get; set; }
}

因此,现在可以确保 PropertyParent 类型或任何派生类型。

关于c# - 通用 c# 属性类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35465825/

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