繁体   English   中英

C#中的返回类型

[英]return type in C#

我有两个名为ROADPATH的

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 ,因为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(); }
}

或者其他一些更好的模式,取决于你为什么这样做。

使用界面将是最好的方法:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM