Тема: [VB] Як створити обʼєкт не вказуючи назву класу?
Хочу замість a = New ClassName писати a = New зсередини класу. Або хоча б замість вказування назви класи писати щось на кшталт Reflection.MethodBase.GetCurrentMethod.DeclaringType.Name.
Ви не увійшли. Будь ласка, увійдіть або зареєструйтесь.
Ласкаво просимо вас на україномовний форум з програмування, веб-дизайну, SEO та всього пов'язаного з інтернетом та комп'ютерами.
Будемо вдячні, якщо ви поділитись посиланням на Replace.org.ua на інших ресурсах.
Для того щоб створювати теми та надсилати повідомлення вам потрібно Зареєструватись.
Український форум програмістів → C#, .NET → [VB] Як створити обʼєкт не вказуючи назву класу?
Сторінки 1
Для відправлення відповіді ви повинні увійти або зареєструватися
Хочу замість a = New ClassName писати a = New зсередини класу. Або хоча б замість вказування назви класи писати щось на кшталт Reflection.MethodBase.GetCurrentMethod.DeclaringType.Name.
Створюйте фабричний метод і генеруйте, що треба.
Не хочу.
Не хочу.
Змусьте себе
ну, я не зовсім зрозуміло що ви розумієте під "зсередини класу". Сучасний синтаксис дозволяє такі маніпуляції
var variable1 = new MyClassType();
MyClassType variable2 = new();
якщо MyClassType в вас занадто довге, і бажаєте скоротити на більш лаконічне, можна використовувати using
using Alias = FullNamespaceName.MyClassType;
//...
var variable1 = new Alias();
Alias variable2 = new();
Якщо в вас який типизований метод/класс, можна в умовах типу вказувати необхідність наявності порожнього конструктора.
void MyMethod<T>() where T : new
{
var variable = new T();
}
Отак:
Class MClass
Sub New()
Console.WriteLine("Constructor")
End Sub
Shared Sub Create
Dim objMe = New
End Sub
End Class
Виглядає як щось дуже упороте. І якщо New хочаб в теорії можливо працюватиме (хоча ця економія літер в сучасних IDE абсолютно позбавлена сенсу, а в умовному блокноті заважає пошуку), то Dim objMe = New -- повністю невалідно для компілятора, так як неможливо визначити що там тип даних ви намагаєтесь ініціалізувати.
Dim objMe = New
Відки компілятор має знати якого типу objMe ти хочеш ?
Тут 3 способи створити екземпляр:
Imports Alias = ...
Generic T As {New}
Activator.CreateInstance(Of T)()
Imports C = VB_Project.SomeSpace.SomeClass
Namespace SomeSpace
Public Class SomeClass
Sub New()
Console.WriteLine("{0} Constructor", Me.GetType().FullName)
End Sub
Public Shared Function Create() As C
Return New C()
End Function
' or
Public Shared Function CreateNew(Of T As {New})() As T
Return New T()
End Function
' or
Public Shared Function CreateInstance(Of T)() As T
Return Activator.CreateInstance(Of T)()
End Function
End Class
Module MyModule
Sub Main()
Dim obj As New C
obj = C.Create()
obj = C.CreateNew(Of C)()
obj = C.CreateInstance(Of C)()
End Sub
End Module
End Namespace
* - проджект мав імя "VB_Project"
Сторінки 1
Для відправлення відповіді ви повинні увійти або зареєструватися