gpt4 book ai didi

c# - 为什么默认 C# 类(由 Microsoft 编写)不遵守与编码人员编写的类相同的 C# 规则

转载 作者:行者123 更新时间:2023-11-30 13:57:20 26 4
gpt4 key购买 nike

我的问题是,如果我在 A 类(它是一个基类并且有其他 2 或 3 个非默认构造函数)中没有默认构造函数,我怎么能运行非Class B 中派生自 Class A 的默认构造函数。

但我发现这不适用于默认 C# 类,我在 asp.net mvc 中使用值提供程序并遇到了一个名为 FormValueProvider 的类,它派生自它的基类NameValueCollectionValueProvider

FormValueProvider 只有一个构造函数,它有一个 ControllerContext 类型的参数。它的基类 NameValueCollectionValueProvider 有两个构造函数,一个有两个参数类型分别为 NameValueCollectionCultureInfo 另一个有三个参数,其中两个是类型NameValueCollection 第三个是类型 CultureInfo.

NameValueCollectionValueProvider 没有默认构造函数。为什么这条规则适用于编写自己代码的程序员而不适用于 Microsoft 编写的默认 C# 类。

最佳答案

因为他们分别使用thisbase调用它们。

例如,FormvalueProvider 上的这个构造函数调用 FormValueProvider 上的另一个构造函数:

public FormValueProvider(ControllerContext controllerContext)
: this(controllerContext,
new UnvalidatedRequestValuesWrapper(controllerContext.HttpContext.Request.Unvalidated()))

然后调用 NameValueCollectionValueProvider 的构造函数:

internal FormValueProvider(ControllerContext controllerContext, IUnvalidatedRequestValues unvalidatedValues) 
: base(controllerContext.HttpContext.Request.Form,
unvalidatedValues.Form,
CultureInfo.CurrentCulture)

请注意,第二个构造函数是 internal.. 这意味着您将无法调用该特定重载。这里发生的是它们为特定重载提供默认值,这意味着您不必为它们指定它们就可以到达目的地。

base 关键字的文档在这里:http://msdn.microsoft.com/en-us/library/hfw7t1ce.aspx

关于c# - 为什么默认 C# 类(由 Microsoft 编写)不遵守与编码人员编写的类相同的 C# 规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21653737/

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