C#DLL无缘无故地调用属性“ get”

问题描述 投票:0回答:1

我正在Visual Studio 2019(Professional)中创建自定义C#Windows窗体控件库(DLL)。我的控件有一个采用以下形式的属性(此属性旨在供使用DLL的应用程序访问):

public double Hello
{
    get { throw new ApplicationException("Hi!"); }
}

((为了找出为什么会发生这种情况,我简化了该属性,使其仅引发异常,并且不执行其他任何操作。)

出于某种原因,如果我在调试模式下运行用户控件,则会引发异常-即使此代码中没有其他地方调用该属性! (IDE对此进行了确认-在其上方说“ 0个引用”)。为什么似乎无缘无故地调用了属性“ get”访问器?堆栈跟踪显示“ get”已由“ [外部代码]” ...

调用

如果具有Visual Studio 2019,这应该很容易重现:在C#下创建一个新的“ Windows窗体控件库(.NET Framework)”项目,然后在解决方案资源管理器中右键单击“ UserControl1.cs”,然后单击“查看代码”,然后只需将上面的代码添加到类中即可。

c# visual-studio winforms dll properties
1个回答
0
投票

我转载了您的问题。根据我的测试,我发现winformscontrollibary将

加载您在代码中设置的所有属性,因为它需要将它们加载到]中>

属性栏。类似于以下内容,如果您编写以下代码。

 public partial class UserControl1: UserControl
    {
        public UserControl1()
        {
            InitializeComponent();
        }
        public double Hello
        {
            get { return 1.02; }

        }
        public int Number
        {
            get { return 1; }

        }

    }

您将在表格右侧看到正确的属性(Hello和Number)。enter image description here

因此,如果您编写代码,则抛出新的ApplicationException(“ H​​i!”);在get方法中,它将引发异常。

© www.soinside.com 2019 - 2024. All rights reserved.