2012-07-18 113 views
0

我正在看一些代碼,我有點困惑。這個類不是一個接口,但爲什麼這些方法沒有定義?另外,牀邊方法簽名,還有一個固定的屬性。很混亂!常規類只能包含方法簽名(如接口)嗎?

public class MyClass 
{ 
    public string Foo(string str1); 
    public string Bar(string str, int i); 

    public string myProperty { get; set; } 
} 

感謝您的幫助

+1

也許它們是抽象的?在這種情況下,程序員期望你創建你自己的子類。 – KingCronus 2012-07-18 20:25:05

+0

當你試圖編譯它時發生了什麼? – 2012-07-18 20:33:48

回答

6

不,這是無效的,如圖所示,並且您可以通過嘗試編譯它來證明儘可能多。對於包含未實現方法的類,它必須聲明爲abstract,對於每個未實現的方法也是如此。

abstract類在概念上類似於接口,但它們也可能包含實現。這使得它們適用於某些方法可能會在繼承層次結構中共享一個通用實現的情況,但其他方法只有在通過後代類型實現時纔有意義。

方法標記爲externpartial也可以缺少身體,但extern方法通常互操作(故在本機代碼實現),以及partial方法將在另一個.cs文件實現(可在僅聲明類標記爲partial)。

順便說一下,屬性很好,因爲它是自動的(語法糖,這意味着將爲您創建後臺字段,並且get/set方法僅僅返回/設置該字段,僅此而已)。

+0

如果我標記了ABSTRACT類,我從不打擾問。既然,他沒有,我以爲我錯過了一些東西。那麼,你是否讓我放心,那裏有一個錯誤? – Richard77 2012-07-18 20:35:44

+1

@ Richard77:是的,該代碼不能編譯(自己試一下,應該只需要幾秒鐘)。我沒有根據代碼示例假設您對抽象/部分類的知識。 – 2012-07-18 20:44:30

1

可以標記方法爲abstract,然後你將有一個abstract

,但你爲什麼要這麼做?如果在基類中沒有任何代碼,只需使用一個接口

+0

他有一個具體的財產。 – Servy 2012-07-18 20:29:33

+1

@Servy那是對的,但它仍然不會改變在這種情況下使用接口的原因 – eyossi 2012-07-18 20:30:43

+1

接口非常適合,但確實沒有足夠的信息來斷言。可能實現的方法被OP省略,或者實際的類在邏輯上代表抽象的「父」類型而不是合約。 – Servy 2012-07-18 20:32:25

相關問題