c#中的返回类型
本文关键字:返回类型 | 更新日期: 2023-09-27 18:12:33
我有两个类命名为ROAD和PATH
public class ROAD
{
public string getData()
{
return "Marlton Road";
}
}
public class PATH
{
public string getData()
{
return "Tagore Path";
}
}
我也有一个名为FETCH()的函数在我的静态Void Main
FETCH()包含以下代码
public returnType FETCH(bool flag)
{
if(flag)
{
ROAD obj=new ROAD();
return obj;
}
else
{
PATH obj=new PATH();
return obj;
}
}
现在我的问题是函数FETCH()的返回类型应该是什么。或者有其他方法来实现这个逻辑吗?
在这种情况下必须是object
,因为PATH
和ROAD
没有共同的碱基类型。(它们也不遵循。net命名约定——这一点应该与您的getData
方法和FETCH
方法一起修复。)即使在示例代码中,也值得尝试使您的名称遵循正常约定)。
考虑让两个类实现一个接口或给它们一个公共基类。然后,该公共类型可以是方法的返回类型。它看起来像你可能有一个接口与你的getData
方法,例如。希望在您的实际类中,它可以有一个更有意义的名称-与路径和道路有关。
我建议您创建一个接口,PATH和ROAD实现(例如IGetData),然后有两个类实现它,并有FETCH返回一个IGetData。
Object
,然后转换为ROAD
或PATH
。或者,如果它们共享一个公共基类,则返回它。参见.
但是你可能不想这样做。ROAD和PATH应该各自有自己的静态工厂方法:
class ROAD {
static ROAD newRoad() { return new ROAD(); }
}
class PATH {
static PATH newPath() { return new PATH(); }
}
或者其他更好的模式,这取决于你为什么这样做。
使用interface是最好的方法:
public interface IData
{
string getData();
}
public class ROAD : IData
{
public string getData()
{
return "Marlton Road";
}
}
public class PATH : IData
{
public string getData()
{
return "Tagore Path";
}
}
public IData FETCH(bool flag)
{
if (flag)
{
ROAD obj = new ROAD();
return obj;
}
else
{
PATH obj = new PATH();
return obj;
}
}
这个怎么样:
interface IWithData
{
string GetData();
}
class Path: IWithData
{
public string GetData()
{
return "Tagore Path";
}
}
class Road: IWithData
{
public string GetData()
{
return "Marlton Road";
}
}
class SomeOtherClass
{
// ...
public IWithData FETCH(bool flag)
{
if(flag)
{
Road obj=new Road();
return obj;
}
else
{
Path obj=new Path();
return obj;
}
}
// ...
}
是object
。如果你希望它是别的东西,你只需要让那些类共享一个公共基或实现一个公共接口。例如:
public class Road : IPavedSurface
{
// members
}
public class Path : IPavedSurface
{
// members
}
// then
public IPavedSurface Fetch(bool flag)
{