C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


■92254 / )  Re[4]: メソッド内の一部のみ派生したクラスに変えたい
□投稿者/ 魔界の仮面弁士 (2359回)-(2019/09/05(Thu) 11:50:03)
No92252 (tro さん) に返信
> 基底クラスを使用するFunc()はアプリA、派生クラスを使用するFunc()はアプリBで使用するという形になっています。
> 基底クラス、及び基底クラスを使用するFunc()はアプリA、Bの共通dllに存在します。

「virtual void Func()」は、TestBase 上に実装されているのでしょうか。
それとも別のクラスで定義しているのでしょうか。

「アプリA で使用する、共通dll 内の Func()」は何処に実装されているのでしょう。
TestA でしょうか。あるいは、それらとは別のクラス内に実装されているのでしょうか。


> public virtual void Func()
> {
>  TestBase testBase = new TestBase
>  {
>   ValueCommon = "Test"
>  };
> }
> public override void Func()
> {
>  TestA testA = new TestA
>  {
>   ValueCommon = "Test"
>  };
> }

インスタンスをセットしているのは、フィールド変数ではなく、ローカル変数なのですよね?
スコープ的に、インスタンスを生成してすぐ破棄されているだけなので、
メソッドの意図が良く分からないです…。

ひとまず、Func をオーバーライドすること無く、同じような動作にしたいという話なら、たとえば

// --- 基底実装 ---
 protected virtual TestBase Create() => new TestBase();
 public /* virtual */ void Func()
 {
  TestBase x = Create();
  x.ValueCommon = "Test";
 }

// --- 派生実装 ---
 protected override TestBase Create() => new TestA();
 // Func() はもとの実装のままで OK

のように書けます。
返信 編集キー/


管理者用

- Child Tree -