[英]return type in C#
我有两个名为ROAD和PATH的类
public class ROAD
{
public string getData()
{
return "Marlton Road";
}
}
public class PATH
{
public string getData()
{
return "Tagore Path";
}
}
我在Static Void Main中有一个名为FETCH()的函数
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(); }
}
或者其他一些更好的模式,取决于你为什么这样做。
使用界面将是最好的方法:
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)
{
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.