C# DLL вызывает свойство "get" без причины - PullRequest
0 голосов
/ 17 января 2020

Я создаю пользовательскую C# Windows библиотеку управления формами (DLL) в Visual Studio 2019 (Professional). У моего элемента управления есть свойство, которое принимает следующую форму (это свойство предназначено для доступа к приложениям, использующим DLL):

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

(В моих попытках выяснить, почему это происходит, я упростил свойство, чтобы просто вызвать исключение и больше ничего не делать.)

По какой-то причине, если я запускаю свой пользовательский элемент управления (в режиме отладки), возникает исключение - хотя нигде в этом коде это не вызывает имущество! (IDE подтверждает это, говоря «0 ссылок» над ним). Почему свойство «получить» метод доступа кажется вызванным без причины? Трассировка стека показывает, что «get» был вызван «[External code]» ...

Это должно быть довольно легко воспроизвести, если у вас Visual Studio 2019: создайте новый элемент управления * Windows Forms Библиотека (. NET Framework) "проект в C#, затем щелкните правой кнопкой мыши« UserControl1.cs »в обозревателе решений и выберите« Просмотреть код », а затем просто добавьте приведенный выше код в класс.

1 Ответ

1 голос
/ 17 января 2020

Я воспроизвел вашу проблему. Основываясь на моем тесте, я обнаружил, что 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 («Привет!»); в методе get будет выдано исключение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...