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

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

1 голос
/ 16 октября 2008

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

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

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

1 Ответ

2 голосов
/ 16 октября 2008

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

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