2017-02-27 3 views
0

私はEmployeeベースクラスとFullTimeEmpPartTimeEmp派生クラスを持っています。メソッドを使って従業員のタイプを取得できるようにしたい。私はFullTimeEmpPartTimeEmpクラスのコンストラクタにEmployeeTypeを設定する予定です。親クラスまたは基本クラスのメソッドとフィールド

GetEmployeeTypeメソッドとフィールドemployeeTypeを基本クラスまたは派生クラスに入れる必要がありますか?すべての従業員はemployeeTypeを持ち、employeeTypeを返すことができる必要がありますが、値は派生クラスに設定されています。

編集:私は両方の選択肢をコーディングする方法を知っていますが、oopの観点から正しい選択肢がわかりません。私はこれが意見の問題だとは思わなかった。正しいコーディング方法と不正なコーディング方法があると思いました。そのような

+0

返されるEmployeeType関数とは何ですか?文字列?列挙型ですか?あなたは価値の例を挙げることができますか? – Magnus

+1

論理が異なるのでなければ、単に 'EmployedFullTime'のような名前の' bool'プロパティを持たないのはなぜですか?これは、真(フルタイムで雇用される)か偽(パートタイムで雇用される)のいずれかになります。 – TVOHM

+0

Boolsは、2つ以上の値を決して使用しないことが絶対に確実でない限り、一般的にはこれにはあまり適していません。契約者タイプを追加することを決めた場合、避けやすいリファクタリングをたくさんやる必要があります。私はenumsや文字列に固執します。 – Evgeni

答えて

0

何か:あなたのインスタンスでObject.GetType()機能を使用することができます

public abstract class Employee 
{ 
    public abstract string Type { get; } 
} 

public class FullTimeEmployee : Employee 
{ 
    public override string Type { get; } = "Full Time"; 
} 
+0

'Type'としてそのプロパティの名前を決して決して... – Pikoh

+0

これは30秒でまとめたサンプルコードです。 – Evgeni

0

Employeeの種類を確認するには、それがTypeオブジェクトを返します。 例

FullTimeEmp emp = new FullTimeEmp(); 
Type t = emp.GetType(); 

あなたはObject.GetType()

EDITにそれについての詳細情報を確認できます。

両方の親クラスではEmployeeTypeを必要として、あなたは、基本クラス上のフィールドはEmployeeTypeとメソッドGetEmployeeTypeを設定することができ、かつ親クラスのコンストラクタのフィールドの値を設定します。

Evgeniによると、基本クラスを抽象化し、抽象的なgetプロパティを設定し、各親クラスがそれぞれのプロパティの独自のバージョンを実装することもできます。あなたは、この場合に派生クラスでTypeを設定する必要はありません

public class Employee 
{ 
    public Type EmployeeType { get { return GetType(); } } 
} 

public class FullTimeEmp : Employee { } 

:私はこれが可能な解決策は何かしたい理解していれば

+1

これは質問された質問には答えません。 – Servy

1

public class Employee 
{ 
    public virtual string EmployeeType { get { return "Employee"; } } 
} 

public class FullTimeEmp : Employee { 
    public override string EmployeeType { get { return "FullTimeEmp"; } } 
} 

抽象基底クラスと:あなたは文字列として何かを返したい場合は、これは別の解決策である

public abstract class Employee 
{ 
    public abstract string EmployeeType { get; } 
} 

public class FullTimeEmp : Employee { 
    public override string EmployeeType { get { return "FullTimeEmp"; } } 
} 

私は、あなたの質問に答える願っています。

関連する問題