Общие функции в VB.NET

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

Я смоделировал и сопоставил несколько десятков объектов в NHibernate, и мне нужен какой-то универсальный класс для моих операций CRUD вместо создания отдельного постоянного класса для каждого типа ... например,

Sub Update(someObject as Object, objectType as String)
     Dim session As ISession = NHibernateHelper.OpenSession
     Dim transaction As ITransaction = session.BeginTransaction
     session.Update(ctype(someObject, objectType))
     transaction.Commit()
End Sub

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
2 395
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ключевой вопрос здесь: что session.Update принимает в качестве параметра? Если session.Update позволяет использовать общий объект, я бы просто использовал это:

 Sub Update(Of T)(ByVal someObject As T)
     Dim session As ISession = NHibernateHelper.OpenSession
     Dim transaction As ITransaction = session.BeginTransaction
     session.Update(someObject)
     transaction.Commit()
 End Sub

Это передаст общий тип T в session.Update.

Если session.Update просто принимает объект, просто передайте объект; нет необходимости вводить его. Кроме того, если objectType (string) - это просто имя типа текущего объекта, вам лучше в первую очередь использовать someObject.GetType ().

Другие вопросы по теме