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





Ключевой вопрос здесь: что 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 ().