gpt4 book ai didi

c# - 为什么 C# 调用方信息属性需要默认值?

转载 作者:可可西里 更新时间:2023-11-01 08:23:20 33 4
gpt4 key购买 nike

我刚刚看到 C# 5 调用者信息属性 ( http://msdn.microsoft.com/en-us/library/hh534540.aspx )。

这似乎是一个非常有用的功能,我已经阅读了一些文档 ( http://www.codeproject.com/Tips/606379/Caller-Info-Attributes-in-Csharp )。

但是,我只是想知道:为什么必须传入默认值?它们是如何使用的?

以下示例代码显示了如何使用调用者信息属性:

public static void ShowCallerInfo([CallerMemberName] 
string callerName = null, [CallerFilePath] string
callerFilePath = null, [CallerLineNumber] int callerLine=-1)
{
Console.WriteLine("Caller Name: {0}", callerName);
Console.WriteLine("Caller FilePath: {0}", callerFilePath);
Console.WriteLine("Caller Line number: {0}", callerLine);
}

我的问题是:nullnull-1 的默认值有什么用?上面的代码与以下代码有何不同:

public static void ShowCallerInfo([CallerMemberName] 
string callerName = "hello", [CallerFilePath] string
callerFilePath = "world", [CallerLineNumber] int callerLine=-42)
{
Console.WriteLine("Caller Name: {0}", callerName);
Console.WriteLine("Caller FilePath: {0}", callerFilePath);
Console.WriteLine("Caller Line number: {0}", callerLine);
}

按照我的理解,这些是可选参数,编译器提供默认值,替换我们分配的任何默认值。在那种情况下,我们为什么要指定默认值?是否存在一些奇怪的边缘情况,编译器可能无法填充值,并求助于我们提供的默认值?如果不是,那为什么要求我们输入这些数据?要求开发人员提供永远不会被使用的默认值似乎相当笨拙。

免责声明:我尝试用谷歌搜索这个,但我找不到任何东西。我几乎不敢就 SO 提出问题,因为大多数这样的新手问题都会遇到这样的敌意,但作为最后的手段,我会冒险提出一个问题。版主/高级用户,无意冒犯 - 我确实在发布之前尝试在其他地方查找信息。

最佳答案

这些参数需要一个默认值,因为 Caller Info 属性是使用可选参数实现的,而可选参数需要一个默认值。这样调用就可以是简单的 ShowCallerInfo() 而无需发送任何参数,编译器将添加相关参数。

为什么一开始就使用可选参数来实现它是一个更深层次的问题。他们可以没有,并且编译器需要在实际编译开始之前“注入(inject)”这些参数,但与可选参数(这是一个 C# 4.0 特性)它不会向后兼容并且会破坏其他编译器/代码分析工具

关于c# - 为什么 C# 调用方信息属性需要默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24358016/

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