繁体   English   中英

编译后更改返回类型

[英]changing the return type after compile-time

我正在为C#中的项目创建类UML,我想知道是否有可能做点事情并想在开始编写之前进行检查。

我有一个函数,该函数获取一个类数组,并基于其索引的“级别” int返回一个类。 它使用的数组将始终是同一数组,但是根据播放器的输入,它包含的类将有所不同。

有没有一种方法可以将返回类型设置为本质上类似于“未定”的东西,然后在函数本身中根据array [level]上的类设置返回类型?

谢谢

您可以使用dynamic作为返回类型:

动态:

动态类型是C#4.0中引入的。 动态类型间接使用System.Object,但是它不需要在运行时对任何操作进行显式类型转换,因为它仅在运行时标识类型。

在此处输入图片说明

在上面的代码中,我们为变量分配各种类型的值,因为它的类型是动态的,并且动态延迟确定类型直到执行。 所有动态类型变量都在运行时享受聚会。

dynamic返回类型的示例:

class ExampleClass
{
    // A dynamic field. 
    static dynamic field;

    // A dynamic property.
    dynamic prop { get; set; }

    // A dynamic return type and a dynamic parameter type. 
    public dynamic exampleMethod(dynamic d)
    {
        // A dynamic local variable.
        dynamic local = "Local variable";
        int two = 2;

        if (d is int)
        {
            return local;
        }
        else
        {
            return two;
        }
    }
}


namespace DynamicExamples
{
    class Program
    {
        static void Main(string[] args)
        {
            ExampleClass ec = new ExampleClass();
            Console.WriteLine(ec.exampleMethod(10));
            Console.WriteLine(ec.exampleMethod("value"));

            // The following line causes a compiler error because exampleMethod 
            // takes only one argument. 
            //Console.WriteLine(ec.exampleMethod(10, 4));

            dynamic dynamic_ec = new ExampleClass();
            Console.WriteLine(dynamic_ec.exampleMethod(10));

            // Because dynamic_ec is dynamic, the following call to exampleMethod 
            // with two arguments does not produce an error at compile time. 
            // However, itdoes cause a run-time error.  
            //Console.WriteLine(dynamic_ec.exampleMethod(10, 4));
        }
    }
// Results: 
// Local variable 
// 2 
// Local variable

dynamicObject返回类型都可以工作(尽管Object仅适用于非原始数据类型)

您可能要考虑为返回类型创建一个接口 ,并在可能的返回值类中实现它。

interface IReturnType
{
  void Do();
}

和:

class AReturnType : IReturnType
{
  void Do()
  {
    //do something
  }
}

class BReturnType : IReturnType
{
  void Do()
  {
    //do something else
  }
}

用法是:

List<IReturnType> MyFunction( List<ConstantClass> constantClasses );

编辑:这不会在编译后更改返回类型,只是一种不同的方法:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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