gpt4 book ai didi

c# - 返回共享一个方法的不同类型的两个可能对象之一

转载 作者:IT王子 更新时间:2023-10-29 04:45:54 34 4
gpt4 key购买 nike

我有 2 个类:

public class Articles
{
private string name;

public Articles(string name)
{
this.name = name;
}

public void Output()
{
Console.WriteLine("The class is: " + this.GetType());
Console.WriteLine("The name is: " + name);
}
}

public class Questionnaire 
{
private string name;

public Questionnaire(string name)
{
this.name = name;
}

public void Output()
{
Console.WriteLine("The class is: " + this.GetType());
Console.WriteLine("The name is: " + name);
}
}

我想写一个方法,它接受一个整数(1 表示应该返回 Articles,2 表示 Questionnaire)和一个名称。

此方法必须返回这两个类之一的实例:

public [What type??] Choose(int x, string name)
{
if (x == 1)
{
Articles art = new Articles(name);
return art;
}
if (x == 2)
{
Questionnaire ques = new Questionnaire(name);
return ques;
}
}

我应该使用什么返回类型,以便我可以对结果调用 Output()

最佳答案

为什么不用 base class定义了 Output。然后返回基地。

public abstract class BaseType {
public abstract void Output();
}

ArticlesQuestionaire 都应该继承这个BaseType

public class Articles : BaseType {
// Output method here
}

public class Questionaire : BaseType {
// Output method here
}

然后你可以这样做:

public static BaseType Choose(int x, string name) 
{
if (x == 1)
{
Articles art = new Articles(name);
return art;
}
if (x == 2)
{
Questionnaire ques = new Questionnaire(name);
return ques;
}
}

您也可以通过 interface 实现此目的.

public interface IInterface {
void Output();
}

public class Articles : IInterface {
// Output method here
}

public class Questionaire : IInterface {
// Output method here
}

然后您必须修改 Choose 方法以返回 IInterface 而不是 BaseType。你选择哪个取决于你。

注意:即使您不能更改原始类,您仍然可以在求助于 dynamic 之前使用这些方法,方法是提供实现接口(interface)并继承原始类或将调用转发到相应方法的包装类:

public class ArticlesProxy : Articles, IInterface 
{
public ArticlesProxy(string name) : base(name){}

}

public class QuestionaireProxy : Questionaire, IInterface {
Questionaire inner;
public QuestionaireProxy(string name) { inner = new Questionaire(name); }

public void Output() { inner.Output();}

}

关于c# - 返回共享一个方法的不同类型的两个可能对象之一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17491062/

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