Любопытный вопрос - переменные интерфейса (т.е. dim x as Iinterface = object?), А также, если object является формой - PullRequest
2 голосов
/ 10 марта 2010

vb.net Windows формирует вопрос. У меня есть 3 формы с одинаковыми функциями, поэтому я решил создать интерфейс.

public Interface IExample

    public sub Add()

    Public sub Edit()

    Public sub View()

End Interface

Затем я создал 3 формы и добавил «интерфейс IExample» к каждой из них.

   public class frmExample1

        implements Interface IExample

То же самое для frmExample2, frmExample3

Наконец, в коде я объявляю переменную типа интерфейса. Dim objfrmExample as IExample

тогда ...

objFrmExample = frmExample2

На данный момент, экземпляр objfrmExample теперь создается, хотя я не выполнил "objfrmExpample = new [что происходит здесь?]" И мне любопытно, почему.

Я мог бы догадаться, что, поскольку вы не можете создать экземпляр переменной интерфейса, vb.net автоматически создаст экземпляр. Но это только предположение. Вопрос в том, что подразумевается под объявлением переменной типа Interface и как она работает?

В любом случае, просто любопытно: -)

Ответы [ 2 ]

3 голосов
/ 10 марта 2010

На данный момент, экземпляр objfrmExample теперь создается, хотя я не выполнил "objfrmExpample = new [что происходит здесь?]", И мне любопытно, почему.

Это не имеет ничего общего с интерфейсами. Вы всегда можете обработать имя класса формы в VB, как если бы это был экземпляр. Причина в том, что компилятор VB создает свойства всех ваших форм внутри My.Forms. Теперь вы можете получить доступ к экземпляру «по умолчанию» каждой формы, набрав My.Forms.<FormName>.

Теперь самое неприятное: вы также можете опустить My.Forms.. Другими словами, всякий раз, когда вы пишете только FormName, и из контекста однозначно требуется экземпляр , а не имя класса, VB будет действовать так, как если бы вы написали My.Forms.<FormName>.

К счастью, этот только работает для форм, а не для любых других классов. VB создает каждый экземпляр по умолчанию при первом обращении к нему. Поэтому, пока вы не обращаетесь к экземпляру по умолчанию, он не создается. Как только вы обращаетесь к нему в первый раз, VB создает его и вызывает его конструктор.

2 голосов
/ 10 марта 2010

Когда вы объявляете переменную типа interface, вы можете работать с любым объектом, который реализует интерфейс. Следовательно, при установке переменной, имеющей тип интерфейса, равный классу, который реализует интерфейс, выполняется неявное приведение. Например.

Dim oExample as IExample
dim testForm as MyTestForm
oExample = MyTestForm

Теперь, вот как вы это делаете, вы можете сделать явное приведение таким образом

Dim oExample as IExample
Dim testForm as MyTestForm
oExample = CType(MyTestForm, IExample)

Для вашего конкретного примера с VB.NET и неинстанцированной формой это связано с «функцией» VB, которая автоматически создает экземпляр формы.

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