2013-11-04 53 views
1

可以使用部分類我修改的功能像一個部分類聲明它,而在另一個部分類可以在C#部分類被用來修改功能

public partial class PartialClass  
{   
    public void showa() 
    { 

    } 
} 
public partial class PartialClass 
{ 
    string b = "b"; 
    public void showa() 
    { 
     Console.Write(b); 
    } 
} 

定義它或延伸的函數的在功能性另一部分類

public partial class PartialClass 
{ 
    int a = 10; 
    public void showa() 
    { 
     Console.WriteLine(a); 
    } 
} 

public partial class PartialClass 
{ 
    string b = "b"; 
    public void showa() 
    { 
     Console.WriteLine(a+b); 
    } 
} 
+0

不是一個真正的答案,但你不能從PartialClass繼承,然後重寫Showa()的功能? –

+7

[部分方法](http://msdn.microsoft.com/en-us/library/6b0scde8.aspx)? –

+1

爲什麼不試試呢?寫這個問題可能花費的時間比將代碼寫入LINQPad的時間要長。此外,目前還不清楚你想要做什麼。部分類和部分方法用於幫助自動生成代碼。 – sloth

回答

7

是的,但你需要使用分部方法太:

public partial class PartialClass  
{   
    public void showa() 
    { 
     showaImpl(); 
    } 
    partial void showaImpl(); 
} 
public partial class PartialClass 
{ 
    string b = "b"; 
    partial void showaImpl() 
    { 
     Console.Write(b); 
    } 
} 

現在,如果代碼僅用前半部分編譯 - 那麼showa()空方法。如果聲明showaImpl實現 - 那麼該調用存在。調用分部方法完全忽略由編譯器,如果沒有執行 - 因爲這個原因,他們不能有訪問修飾符,或有返回值,或out參數(因爲這將使在明確賦值來電者是一場噩夢)。

+0

哇,C#*真的*允許嗎?部分類足夠邪惡,不需要添加此功能:( –

+0

@DavidArno主用例是生成類型('.designer.cs'等)的擴展點;生成的代碼聲明瞭部分方法,幷包含在預期的地方調用它們;然後如果開發者*實現了部分類,則調用存在;如果它們沒有實現它們:調用不存在。 sqlmetal或EF,看看我的意思 –

+0

@DavidArno我的意思是,讓我們面對它:編輯生成的文件和LINQ到SQL等的問題*基本上*爲什麼'部分'功能被添加在第一位 –