2014-02-24 40 views
3

一位面試官問我,他有很多方法的沉重課堂。 他現在只需要一種方法。委託可以用來調用一個類的方法而不需要實例化嗎?

他問我C#中的Delegates是否可以幫助我調用該方法而不實例化類?

他說好的代表可以這樣幫助我們。

我用Google搜索了它。我試着在VS上運行它,但我想我需要初始化這個類。

看一看這個片段 -

public class HomeController : Controller 
{ 

    public ActionResult test() 
    {    
     NumberChanger nc1 = new NumberChanger(/*what to do here! 
              can i call sum method of class abc*/); 

     return View(); 
    } 
} 

public delegate int NumberChanger(int n, int m); 

public class abc 
{ 
    int a; 
    int b; 

    public int sum(int a, int b) { 
     return a + b; 
    } 

} 

回答

0

如果您需要使用非靜態方法,也許你應該使用新的NumberChanger(。新的ABC()和)
試試

+0

謝謝@mangusta,但在這裏有新的,我們實例化類 – Lakshay

+1

嗯,我想也沒辦法,如果方法不委託方法的類的成員:/ – mangusta

0

您總是需要至少一個實例才能調用實例方法。

但是,如果你想避免產生大量的重物,你可以使用這樣的伎倆:

class TestClass 
{ 
    private static TestClass DummyInstance; 

    public static Action GetShowAsDelegate() 
    { 
     DummyInstance = DummyInstance ?? new TestClass(); 
     return (DummyInstance.Show); 
    } 

    public void Show() 
    { 
     Console.WriteLine("It works!"); 
    } 
} 

class Program 
{ 
    static void Main(string[] args) 
    { 
     var show = TestClass.GetShowAsDelegate(); 
     show(); 
    } 
} 

你的類存儲自身的私有靜態實例,當主叫用戶請求一個被實例化代表版本Show()。然後它使用該實例,因此您不需要每次都從外部創建一個實例。第一次調用後,任何人都可以通過獲取委託來運行Show方法,而無需創建更多實例。

+0

感謝Baldrick :) – Lakshay

+1

@Lakshay : 沒問題。我不認爲有可能做得比這更好...... AFAIK,你總是需要至少1個實例才能調用一個實例方法。 – Baldrick

相關問題