gpt4 book ai didi

.net - 为什么 InitializeComponent 是公开的

转载 作者:行者123 更新时间:2023-12-04 12:11:33 24 4
gpt4 key购买 nike

我的 WPF 用户控件的公共(public)接口(interface)包含自动生成的 InitializeComponent 方法(包含在部分类中)。这对我来说是一个惊喜,因为我期望这样一个内部的东西是私有(private)的。

有没有办法从用户控制公共(public)界面中删除 InitializeComponent?

最佳答案

InitializeComponent是接口(interface)System.Windows.Markup.IComponentConnector上定义的方法用于加载组件的编译页面。

MSDN以下摘自 link其中有更多信息:
IComponentConnectorBaml2006Reader 内部使用.
InitializeComponent 的实现作为使用 XAML 的框架或技术提供的基础设施的一部分,可广泛观察到结合应用程序和编程模型。例如,每当您查看为 WPF 页面和应用程序中的 XAML 根元素生成的类时,您将看到在输出中定义的 InitializeComponent。该方法也存在于已编译的程序集中,并在 WPF 应用程序模型中发挥作用,即在 XAML 解析时加载 XAML UI 内容(因此我想 InitializeComponent 必须在接口(interface)中并且是公共(public)的,以便其他外部 WPF 相关组件可以使用它)。

要进一步解释这一点,请转到 InitializeComponent() 的定义。你(比如说)中的方法:Window1.g.cs类说:WPFProject项目,并从 public 更改其访问权限至private

(keep the .g.cs file open in your project otherwise the build process overrides this file, and you won't be able to see the error)



现在,当您编译 WPF 项目时,它会引发如下编译错误:

Error 22 'WPFProject.Window1' does not implement interface member 'System.Windows.Markup.IComponentConnector.InitializeComponent()'. 'WPFProject.Window1.InitializeComponent()' cannot implement an interface member because it is not public.



此外, InitializeComponent()标有 [System.Diagnostics.DebuggerNonUserCodeAttribute()]属性,因此您在调试时无法进入此方法。

还有一个 SO QA discussion ,这将帮助您更详细地解释

关于.net - 为什么 InitializeComponent 是公开的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10529935/

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