我遇到了一個給定任務的問題,我想徵詢一個建議。接口繼承與類繼承相結合
有人告訴我,來實現: IPerson接口基於IPerson Person類IEmployee和員工延伸IPerson和人
迷茫中最後一句,我不知道如何來處理那些要求。我有一個想法,我希望它被你驗證,因爲人員和員工將使用列表存儲:
IEmployee擴展IPerson和員工只是實現IEmployee?或者除此之外,員工還應該擴展Person?
感謝您回答這個問題!
我遇到了一個給定任務的問題,我想徵詢一個建議。接口繼承與類繼承相結合
有人告訴我,來實現: IPerson接口基於IPerson Person類IEmployee和員工延伸IPerson和人
迷茫中最後一句,我不知道如何來處理那些要求。我有一個想法,我希望它被你驗證,因爲人員和員工將使用列表存儲:
IEmployee擴展IPerson和員工只是實現IEmployee?或者除此之外,員工還應該擴展Person?
感謝您回答這個問題!
所有員工都是員工,因此所有員工都實施了IEmployee
和IPerson
。 Employee
類擴展了Person
類。
public interface IPerson
{
}
public class Person : IPerson
{
}
public interface IEmployee : IPerson
{
}
public class Employee : Person, IEmployee
{
}
我認爲'員工'應該延伸'人',這就是我的理解OP –
這個答案是第一位的,所以我要把它標記爲正確的答案。謝謝你確認我的想法。 – user1970395
這是你想要什麼:
public interface IPerson { }
public interface IEmployee : IPerson { }
public class Person : IPerson { }
public class Employee : Person, IEmployee { }
_「給一個男人一條魚,你給他一天的時間;教一個男人去釣魚,你給他一輩子的食物」_。 _爲什麼OP要什麼? – CodeCaster
@CodeCaster - 我認爲這直接回答了OP。 – Enigmativity
確實如此,但沒有解釋爲什麼它。我不認爲「使用此代碼,它會解決您的問題」是一個有用的答案。 – CodeCaster
真正的問題是,你應該三思而後實現接口層次...
你不想強迫接口實現類要實現將不被使用的方法,那麼請考慮如果使用IEmployee作爲參數的方法也需要全部 IPerson屬性與否。如果不是更好的定義一個只有所需屬性的新接口。
這對應於SOLID原理的Interface segregation。
這就是當你試圖以太抽象或模糊的要求教授它時,OO開始變得模糊的地方。當然,「員工」在日常語言中總是一個「人」,但首先創建了「IEmployee」接口要求是有原因的。如果這個例子是針對支付系統的,那麼'IEmployee'顯然是錯誤的。例如,您可能需要支付清潔員(您通過公司僱用的清潔工),或僱用自僱人員。那麼'IPayableEntity'就會變得更有意義,因爲無論如何你都不會將這些實體作爲人來處理,所以'(I)Person'在那個繼承樹中沒有位置。 – CodeCaster
我不認爲我的解釋太抽象了,但我已經更新了一個帶有詳細示例的「不太抽象」的鏈接。 (順便說一句,你的例子非常好...) – DaniCE
我不是說你的例子,而是一般談論OO設計的問題。 – CodeCaster
作爲補充:請記住,C#不支持多繼承。一個類只能擴展一個類,但它可以實現n個接口。 – oopbase
只要給'IPerson'一個字符串Name屬性和'IEmployee'一個'字符串EmployeeCode'屬性並看看你會得到多少? – CodeCaster
@COdeCaster你是對的我應該這樣做。我只是想在實施它之前問一下,最重要的是要確認我的思維方式,我相信這兩種方式(只要擴展Person而不是)只要他們實現相同的接口就可以工作,但是Employee需要重複所做的事情親自。 – user1970395