gpt4 book ai didi

c# - 为什么不允许条件属性方法返回 void 以外的值

转载 作者:太空狗 更新时间:2023-10-29 21:43:09 25 4
gpt4 key购买 nike

我最近开始通过一本好书学习 C#,现在阅读了有关 Conditional 属性和 #if 编译器指令的内容。

我知道#if编译指令的用法:

#if DEBUG
public void foo(int value)
{ ... }
#endif

Conditional 属性:

[System.Diagnostics.Conditional("DEBUG")]
public void foo(int value)
{ ... }

我还知道 #if ... #endif 语句所包含的代码不会到达 IL,而是 Conditional 属性 code 执行并且将省略对该函数的调用。

我的问题:
为什么对 Conditional 属性的使用有限制,即标有该属性的函数必须返回 void 作为 written here in the documentation

You will get a compilation error in Visual Studio if you apply this attribute to a method that does not return void.

我已经搜索过信息但没有找到任何解释。

最佳答案

编译器不允许它,因为如果它允许,那么像下面这样的代码的语义将是未定义的,或者充其量是相当难以理解的:

var x = someMethod(foo());

[System.Diagnostics.Conditional("DEBUG")]
public int foo()
{
return 42;
}

方法上的[Conditional("DEBUG")] 属性意味着如果DEBUG 符号存在。

但是,如果对 foo() 的调用(返回结果)从编译后的代码中消失了,那么要将什么传递给 someMethod() 呢?或者,如果该调用随后也被删除,分配给 x 的内容是什么?如何保证本地 x 甚至有一个通常会导致编译错误的值?

.NET 团队决定不采用这种方式,而是添加了一个编译时约束,即 [Conditional()] 方法必须是 void 方法。

关于c# - 为什么不允许条件属性方法返回 void 以外的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45367707/

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