リフレクション? 関数分割?

Flex+Java(SpringFramework+iBatis)のPRJ異動から3ヶ月、気づいたらVB2008のコーディングをするようになっていました。
オブジェクト指向が分かれば何のことはない…とタカを括りながらも、VBではコンストラクタを継承できないなどいろんな驚き、気づきを貰いながらここまで何とかやってこれてます。

そんな私の今日の悩み。
下記のような事があり、リフレクションにするか関数分割するか迷ってます。
.NET Frameworkのリフレクションが遅いのであれば関数分割かなと。


ComboBoxとDataGridComboBoxColumnという2つの型があります。
この2つの型は、同じ名前のプロパティ(DataSource,ValueMember,DisplayMemberなどなど)を持ちながらも継承関係ではなく、インターフェースを持っていませんでした。
こんな2つの型に共通の設定を行いたいという要望が現場で上がりました。

そこでまず、現場の方々はこう考えました。

遅延バインディングに任せろ!(バリバリ

Sub foo(ByRef cmbBox As Object, ByVal dataSource As IList)
    cmbBox.DataSource = dataSource
    cmbBox.ValueMember = VM_XXXX
    ' ...
End Sub

しかし、Option Strict Onを書いた途端にコンパイルエラー。浅はかな野望は脆くも崩れ去りました。

ここはコンパイルエラーをなくすことが先決。
現場の方々にすがりつかれましたので、リフレクションの出番ですよ! ということで以下のように書き換えました。

Sub foo(ByRef cmbBox As Object, ByVal dataSource As IList)
    Dim type As System.Type = cmbBox.GetType
    type.GetProperty("DataSource").SetValue(cmbBox, dataSource, Nothing)
    type.GetProperty("ValueMember").SetValue(cmbBox, VM_XXXX, Nothing)
    ' ...
End Sub

…急いで直したのでNullチェックとか色々抜けてるのは後々直すとして。
思ったのは、「ホントにこれでいいのか?」ということです。パフォーマンス的に問題が出ることはないのだろうか。

素直に、別々の引数ComboBox、DataGridComboBoxColumnを持つ別々の関数にしておいた方が確実な気がしました。
もう少し考えてみます。