c#中的返回类型

本文关键字:返回类型 | 更新日期: 2023-09-27 18:12:33

我有两个类命名为ROADPATH

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()的返回类型应该是什么。或者有其他方法来实现这个逻辑吗?

c#中的返回类型

在这种情况下必须是object,因为PATHROAD没有共同的碱基类型。(它们也不遵循。net命名约定——这一点应该与您的getData方法和FETCH方法一起修复。)即使在示例代码中,也值得尝试使您的名称遵循正常约定)。

考虑让两个类实现一个接口或给它们一个公共基类。然后,该公共类型可以是方法的返回类型。它看起来像你可能有一个接口与你的getData方法,例如。希望在您的实际类中,它可以有一个更有意义的名称-与路径和道路有关。

我建议您创建一个接口,PATH和ROAD实现(例如IGetData),然后有两个类实现它,并有FETCH返回一个IGetData。

Object,然后转换为ROADPATH。或者,如果它们共享一个公共基类,则返回它。参见.

但是你可能不想这样做。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)     
{