2017-01-05 8 views
0

イムに抽象クラスのインスタンスを作成する(従業員)抽象クラスのインスタンスを作成しようとしている別のクラス

public abstract class Employee 
{ 
    public Employee() { } 

    public static SchoolEmployeesContext ctx = new SchoolEmployeesContext(); 

    public int EmployeeId { get; set; } 
    public string EmployeeName { get; set; } 
    public string EmployeeSurname { get; set; } 
    public string Address { get; set; } 
    public int Grade { get; set; } 
    public double Salary { get; set; } 
    public DateTime DateOfCommencement { get; set; } 
    public string Username { get; set; } 
    public string Password { get; set; } 

    public Department DepartmentOfEmployee { get; set; } 

} 

は、今のような複数の機能のために、文脈から従業員を取得しようとしているイム従業員の編集と削除。メソッド内でEmployeeがnullであると宣言すると、"未割り当て"エラーが取り除かれました。

public Employee Search(int EmpId) 
     { 
      var Emp = from emp in ctx.Employees 
         where emp.EmployeeId == EmpId 
         select emp; 

      Employee Found = null; 

      foreach (Employee e in Emp) 
      { 
       Found.EmployeeName = e.EmployeeName; 
       Found.EmployeeSurname = e.EmployeeSurname; 
       Found.Address = e.Address; 
       Found.Grade = e.Grade; 
       Found.Salary = e.Salary; 
       Found.DateOfCommencement = e.DateOfCommencement; 
       Found.Username = e.Username; 
       Found.Password = e.Password; 
       Found.DepartmentOfEmployee = e.DepartmentOfEmployee; 
      } 


      return Found; 
     } 
+2

これをさらに詳しく解説するために、Employeeクラスを抽象化する必要がある理由を説明できますか? –

+0

あなたのコードは意味をなさない。結果をループし、プロパティ値を存在しない値に割り当てます。各ループの反復で(動作する場合)、値を再び上書きします。 – Sefe

答えて

2

抽象クラスをインスタンス化することはできません。しかし、これを実行しながら、明らかに私に「null参照の例外」の下に従業員を検索する

方法を与えています。
これらは継承でき、継承された型はインスタンス化できますが、直接インスタンス化することはできません。あなたのコードを見てみると

、これはあなたが何をしたいのか(と思う)である: -

はまた、あなたのクラス定義から

abstractを削除し、あなたのEmployeeクラス内で完全に未使用の静的を持っています

public static SchoolEmployeesContext ctx = new SchoolEmployeesContext(); 

だから私はそれを削除することをお勧めします。

あなたEmployeeクラスは、次のようになります。

public class Employee 
{ 
    public Employee() { } 

    public int EmployeeId { get; set; } 
    public string EmployeeName { get; set; } 
    public string EmployeeSurname { get; set; } 
    public string Address { get; set; } 
    public int Grade { get; set; } 
    public double Salary { get; set; } 
    public DateTime DateOfCommencement { get; set; } 
    public string Username { get; set; } 
    public string Password { get; set; } 

    public Department DepartmentOfEmployee { get; set; } 
} 

はまた、あなたのSearch方法が少し容疑者を探します。

あなたはEmployeeIdは、右の私には見えない供給EmpId
に等しいデータベースから多く従業員を選択しています。

あなたは抽象インスタンス化することはできませんのでごSearch方法は今

public Employee Search(int EmpId) 
{ 
    //this will return the single employee 
    var Emp = ctx.Employees.SingleOrDefault(x=> x.EmployeeId == EmpId); 

    return Emp; 
} 
+1

'public static Sc​​hoolEmployeesContext ctx = new SchoolEmployeesContext();'行を完全に削除することをお勧めします。 – Igor

+0

@Igor良い点、私はそれを逃した – Alex

+1

@Alexありがとう!非常に参考になり、私の問題を解決しました。 – Chanter

0

のようになります(それが存在しない場合、またはnull)IDによって

を単一の項目を取得するためにLINQs SingleOrDefaultを使用することができますクラス。ここでそれらに関する詳細を見つけることができます:https://msdn.microsoft.com/en-us/library/k535acbf(v=vs.71).aspx

抽象クラスはインターフェイスと密接に関連しています。これらは、インスタンス化できないクラスであり、頻繁に部分的に実装されるか、実装されないクラスです。

0

いいえいいえ、完全な実装がないため、抽象クラスのインスタンスを作成することはできません。抽象クラスの目的は、サブクラスのベースとして機能することです。それはテンプレートのように機能するか、空または部分的に空の構造体として機能します。使用する前に拡張して構築する必要があります。

0

抽象クラスはインスタンス化できません。あなたが提供したコードでは、Employeeが抽象である必要はないので、抽象修飾子をEmployeeクラス定義から削除する必要があります。

他の人も指摘しているように、検索方法が間違っているように見えるので、従業員IDと一致する従業員エンティティを選択し、そのエンティティを従業員にマッピングするように変更する必要があります。このようなもの:

public Employee Search(int EmpId) 
{ 
    // Return the employee with the correct Id (or null if not found). 
    var e = ctx.Employees.SingleOrDefault(x=> x.EmployeeId == EmpId); 
    return employeeEntity == null 
     ? null 
     : new Employee 
      { 
       EmployeeName = e.EmployeeName, 
       EmployeeSurname = e.EmployeeSurname, 
       ... 
      }; 
    } 
} 

あなたには実用的な解決策があります。

+0

執筆時点で、受け入れられた回答は、元の質問で誤っていると思われるEmployeeオブジェクトではなく、DataContextからEmployeeエンティティを返します。私はこれをコメントとして追加しています。なぜなら、執筆時点でも、自分の投稿以外に何かをコメントする評判が不十分であるからです。 – swatsonpicken

関連する問題