1樓:炒飯君
c#實現多繼承的具體的解決步驟是:
把之前在parenta和parentb中公共的**封裝到basec中,並作為parent的乙個屬性。
把需要重寫的方法applyeditable定義到乙個介面ibasecaction中。(實際上,如果只有乙個方法需要重寫的話,可以不用定義介面,直接在basec中定義乙個action的委託變數就可以了。當然定義介面更方便支援多個重寫方法。
在child類的構造器中,把自己傳給basec的例項化,即 = new basec(this);望!
2樓:一郎大神
事實上是可以不寫的,但是這樣會導致易讀性降低增加維護負擔。
因為ilist實際裡面不會定義icollection和ienumerable的方法,導致你需要更深入的巢狀跟進才能閱讀,就和深層次的繼承乙個道理。
而寫了之後可以根據這些介面一目瞭然的知道這個類具有哪些功能。
所以為了易讀性,少量的冗餘完全可以接受。
3樓:陽光的雷咩咩
你說的對,確實應該是多餘的。
我能想到的唯一好處是萬一以後ilist繼承的介面變了,比如不再實現icollection, ienumerable,不至於影響array的介面。
c#怎麼用介面實現"多繼承"
4樓:鈾氶瓏鈾
主流的答案無非2種。
答案一:用介面啊,乙個類可以繼承自多個介面的。
答案二:c#不支援多繼承,c++才支援多繼承,多繼承會讓**變得很亂,因此微軟在設計c#的時候放棄了多繼承。
c#裡面的介面和繼承好像有些混了,請問它們有什麼區別呢?
5樓:網友
從本質上觀察介面實現和類繼承,這裡「繼承」一詞不包含繼承介面。
繼承,本質是父類有的,子類也有。或者說,繼承,主要目的是為了**重用。
介面,又稱協議,約定。介面本身並不定義任何成員,它只約定一系列方法的方法名和形參、返回型別(他們的組合叫方法簽名),意思就是提供一系列抽象的功能服務。乙個類實現了乙個介面,意味著這個類承諾他要遵守這個介面所定義的約定,提供這個介面所要求的全部功能。
而呼叫方只需知道這個物件遵守了哪個介面的約定,能提供什麼樣的方法/功能,而不必知道關心這個物件屬於哪個型別的。這個叫多型。
從名稱上看,介面實現和類繼承好像都叫「繼承」,但乙個是多型,乙個是**重用,幾乎是乙個問題的兩個極端。
而抽象類則是介乎兩者的折衷,一方面他限制了子類的型別(因為c#只能單繼承),重用了自己的**,另一方面,它多少又定義了一些抽象的方法簽名,保證它的子類能提供某種功能。
6樓:小強強
介面可以多實現。類只能單繼承。介面一般乙個字母為大寫i開頭。實現介面並繼承類的時候順序是。先繼承類。再實現介面。
c#繼承問題
7樓:匿名使用者
c#中類繼承的規則。
1、繼承是可傳遞的。如果c從b中派生,b又從a中派生,那麼c不僅繼承了b中宣告的成員,同樣也繼承了a中的成員。object類作為所有類的基類。
2、派生類(子類)應當是對基類(父類)的擴充套件。派生類可以新增新成員,但不能除去已經繼承的成員的定義。
3、建構函式和解構函式不能被繼承。除此以外的其它成員,不論對它們定義了怎樣的訪問方式,都能被繼承。基類成員的訪問方式只能決定派生類能否訪問它們。
4、派生類如果定義了與繼承而來的成員同名的新成員,就可以覆蓋已繼承的成員。但這並不因為這派生類刪除了這些成員,只是不能再訪問這些成員。(這點需要注意的是,如果是屬性或者方法同名,但是簽名不同,那就不是覆寫,而是過載了)。
5、類可以定義虛方法、虛屬性以及虛索引指示器,它的派生類能夠過載這些成員,從而實現類可以展示出多型性。
6、派生類只能從乙個類中繼承,可以通過介面實現多重繼承。
C 多層繼承問題
include 定義最低層基類first,它作為其他類的基類class first virtual first 定義派生類second,它作為其他類的基類class second virtual public firstvirtual second 定義最底層派生類third class third...
c 中抽象類繼承的程式設計問題,一個C 中關於繼承性和派生類的程式設計問題,求思路
include define pi 3.1415926 class shape shape virtual void printshapename 0 virtual void print 0 virtual double getarea 0 virtual double getvolume 0 c...
1 1 2怎麼用c語言程式設計,1 1 2怎麼用C語言程式設計
農民工談三農 c程式 內容如下 include main 然後按提示輸入 1 1 就會顯示 a b 2 程式設計完成! 曦月 include main include stdio.h main 獵戶座 int a a 1 1 和同人女一張床 include void main include std...