2017-11-05 12 views
1

派生クラスの基本クラスフィールドのデータ型と値を変更できますが、引き続き基本クラスメソッドを呼び出しますが、派生クラス値を使用できますか?C#継承:派生クラスのフィールドデータ型と値を変更する

サンプルコード:

public class class1 
{ 
    protected DBContext DB { get; set; } 

    public A() 
    { 
    DB = new DBContext(); 
    } 

    public virtual DBRecord find(int id) 
    { 
    return DB.DBRecord.Find(id); 
    } 
} 

public class class2 : class2 
{ 
    protected DifferentDBContext DB { get; set; } 

    public B() 
    { 
    DB = new DifferentDBContext(); 
    } 
} 

し、私は以下のコードでメソッドを呼び出そうとしました。

class2 x = new class2(); 
x.find(1); // calls the base class method with base class field values 

何が起きているかに基づいて、基本クラスの変数を使用して基本クラスのメソッドを呼び出しています。私は派生クラスのフィールドの型/値を設定し、基本クラスのメソッドを呼び出すことが可能かどうかを知りたいですか?彼らは同じ実装を持っているだけで、異なる値を使用しているからです。

私がこれまでにしたこと(これは冗長だと感じています)と作業です。

public class class2 : class1 
{ 
    //Other implementations omitted 
    public override DBRecord find(int id) 
    { 
    return DB.DBRecord.Find(id); 
    } 
} 

注:これは単純なOOP原理かもしれませんが、あなたが知っている、人々はあなたがDBのコンテキストのインターフェイスを使用したりする必要がありどちらか

+0

私がこれを求めている理由は、これが私がやろうとしていることで起こり、同じコードを何度も何度も何度も繰り返すことができないということです。 – Anthony

答えて

0

これを行う方法は、基本クラスであなたの財産を仮想的にすることですDBContext。

+0

ありがとう。これは私のために働いた – Anthony

2

:-)私と同じように、時にはそれと混乱dbコンテキストの基本クラス

public interface IDbContext{} 
public class ContextA : IDbContext{} 
public class ContextB : IDbContext{} 

public class A 
{ 
     protected IDbcontext DB { get; set; } 
     public A(IDbcontext db) 
     { 
      DB = db; 
     } 
} 
public class B : A 
{ 
     public B():this(new ContextB(){} 
     public B(IDbcontext db):base(db){} 
} 

同様に、継承されたコンテキストでも同様のアプローチです。

さらに別のアプローチは、ベースクラスがインタフェースまたは継承を介してdbcontextを再度要求する抽象ベースクラスを持つことができます。派生クラスで

public class class1 
{ 
    protected virtual DBContext DB { get; set; } 
    ... 
} 

し、それをオーバーライドします:これはDifferentDBContextであると仮定されて

public class class2 : class2 
{ 
    protected override DifferentDBContext DB { get; set; } 
    ... 
} 

+0

申し訳ありませんが、詳しいことはできますか?私はちょうど私がこの部分を欠落していると思うので、私はちょうど学んだ私のコードとコンセプトの多くの変更で、今日情報過多を持っていたと思うか、またはちょうど後で処理されます。 – Anthony

+0

これはうまくいくはずです。 'これ(新しいContextb()){}'のようなOOPの部分ではかなり新しいので、今すぐ完全に理解できません:-) – Anthony

関連する問題