オブジェクトを作成してセットアップするライブラリがあり、それらのオブジェクトを使用して何かを行うことができます。
クラス「A」のオブジェクト「a」が与えられたとしましょう
したがって、その特定のオブジェクトのメソッドをオーバーライドしたいのですが、ライブラリを変更する必要があるため、そのクラスのコードを変更したくありません。
Ruby では、次のようなシングルトン クラスを使用してそれを行うことができます。
class FirstClass
def test
p "test"
end
end
o = FirstClass.new
class << o
def test
p "overridden"
end
def extraMethod
p "ok"
end
end
o.test # prints "overridden"
o.extraMethod
どうすればC#で同じことができますか?
アップデート
あまりにも醜く、基本クラスのすべてのプライベートフィールドを保護またはパブリックに変更して派生クラスに存在させる必要があるため、提出した回答を使用しませんでした。したがって、値を基本から派生にコピーできます。
私が最終的に使用した方法は、基本クラスから派生した Type をライブラリに渡し、次を使用してインスタンスを作成するようにライブラリを変更することです。
(A)Activator.CreateInstance(mytype, arguments);