[英]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
dynamic
和Object
返回类型都可以工作(尽管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.