2009-07-31 37 views
7

很多時候它發生,我有私有方法而變得非常大,幷包含重複的任務,但這些任務是如此特殊,它並沒有什麼意義,並提供給其他任何代碼的一部分。C#:爲什麼我們不能有內在的方法/局部功能?

所以這將是非常偉大的,是能夠創造在這種情況下,「內部方法」。

是否有任何技術(甚至是哲學?)限制,以防止C#從給我們呢?或者我錯過了什麼?自2016年

更新:這是來了,這就是所謂的「本地功能」。看到明顯的答案。

+0

什麼比私有方法的詳細內?只有一種方法可用的方法?這只是看起來更多的代碼而已。 – kenny 2009-07-31 09:59:04

+1

你錯過了什麼。自C#2.0以來,C#已具備此功能。 – 2009-07-31 15:31:58

+0

@Eric Lippert:你可以提供一些細節嗎?謝謝。 – Marc 2010-01-20 13:47:45

回答

0

好像我們會得到什麼我C#7 /的Visual Studio 15局部函數想:
https://github.com/dotnet/roslyn/issues/2930

private int SomeMethodExposedToObjectMembers(int input) 
{ 
    int InnerMethod(bool b) 
    { 
     // TODO: Change return based on parameter b 
     return 0; 
    } 

    var calculation = 0; 
    // TODO: Some calculations based on input, store result in calculation 

    if (calculation > 0) return InnerMethod(true); 
    return InnerMethod(false); 
} 

太糟糕了,我不得不等待超過7年爲這:-)

另請參閱早期版本的C#的其他答案。

14

好了,我們可以有一個函數內部定義的「匿名方法」(我不建議使用他們組織了大量方法):

void test() { 
    Action t =() => Console.WriteLine("hello world"); // C# 3.0+ 
    // Action t = delegate { Console.WriteLine("hello world"); }; // C# 2.0+ 
    t(); 
} 
7

如果事情是比一般的好漫長而複雜做法是將其重構爲一個單獨的類(正常或靜態 - 根據上下文) - 在那裏,你可以有私有方法,這將是具體僅此功能。

2

我知道有很多人不喜歡的區域,但是這是他們可以通過分組的具體方法爲區域證明是有用的情況。

1

如果你的方法變得太大,可以考慮把它在一個單獨的類,或創建私有的輔助方法。一般來說,無論何時我通常會寫評論,我都會創建一個新方法。

2

你能給出一個更具體的例子?讀您的文章後,我有以下印象,這當然只是猜測的,由於有限的信息:

  • 私有方法不可用在類的外部,因此不會有任何其他代碼反正隱藏。
  • 如果你想隱藏在同一類的其他代碼的私有方法,你的類可能是大而可能違反單一職責原則。
  • 看一看匿名委託的lambda表達式。這不完全是你要求的,但他們可能會解決你的大部分問題。

阿希姆

0

更好的解決方案是重構該方法來分離類。在初始類中創建此類的實例作爲專用字段。公開大型方法並將大型方​​法重構爲多個私有方法,因此它將清楚它的功能。

相關問題