gpt4 book ai didi

c# - C# 中的 Voldemort 类型

转载 作者:太空狗 更新时间:2023-10-29 20:30:03 24 4
gpt4 key购买 nike

你可能知道在 D 语言中我们有一个叫做 Voldemort Types 的能力。它们被用作实现特定范围功能的内部类型:

auto createVoldemortType(int value)
{
struct TheUnnameable
{
int getValue() { return value; }
}
return TheUnnameable();
}

下面是伏地魔类型的用法:

auto voldemort = createVoldemortType(123);
writeln(voldemort.getValue()); // prints 123

现在我想确定一下,这是否等同于 C# 中的 delegate

public static void Main()
{
var voldemort = createVoldemortType(123);
Console.WriteLine(voldemort());

}
public static Func<int> createVoldemortType(int value)
{
Func<int> theUnnameable = delegate()
{
return value;
};
return theUnnameable;
}

最佳答案

C# 中没有精确 的 Voldermort 类型。与此类局部范围类最接近的称为匿名类型。问题是,与 Voldermort 类型不同,您不能在本地声明之外的编译时引用它们的静态类型:

public object SomeLocalMethod() // Must return either `dynamic` over `object`
{
var myAnonClass = new { X = 1, Y = "Hello" };
Console.WriteLine(myAnonClass.Y); // Prints "Hello";
return myAnonClass;
}

void Main()
{
object tryLookAtAnon = SomeLocalMethod(); // No access to "X" or "Y" variables here.
}

但是,如果我们进入dynamic 领域,您可以引用底层类字段,但我们会失去类型安全性:

void Main()
{
dynamic tryLookAtAnon = SomeLocalMethod();
Console.WriteLine(tryLookAtAnon.X); // prints 1
}

public dynamic SomeLocalMethod()
{
var myAnonClass = new { X = 1, Y = "Hello" };
Console.WriteLine(myAnonClass.Y); // Prints "Hello";
return myAnonClass;
}

C# 中的委托(delegate)类似于 a delegate in D .它们持有对函数的引用。

关于c# - C# 中的 Voldemort 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39433430/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com