2011-05-24 62 views
0
public class Form1:Form 
{ 

    public Form1() 
    { 

    } 
    Form1_Load(object Sender,EventArgs e) 
    { 
      SampleClass Sample=new SampleClass(); 
      Sample.MyMethod(); 
    } 
} 

這是第一類我的項目,第二是C#我怎樣才能瞭解調用我的方法在另一大類類

大家好

public class SampleClass 
    { 
     public void MyMethod() 
     { 
      //When Form1 or another class call this Method 
      //I want to know it for example 

     Caller.Title="Deneme"; 
      // 
     //Unless send parametr.How Can I learn Caller class and i change it items? 

     } 
    } 

回答

3

來電者將不得不通過參考自己進入方法。

public void MyMethod(Form caller) 
    { 
    caller.Title="Deneme"; 
    } 

或者,如果你不想做SampleClass有一個強有力的聯繫,以Form類 - 這可能是在單獨的程序,這並不參考Windows窗體,你可以通過在被調用同一個動作正確的字符串中傳遞。

Form1_Load(object Sender,EventArgs e) 
{ 
     SampleClass Sample=new SampleClass(); 
     Sample.MyMethod(title => this.Title = title); 
} 

public void MyMethod(Action<string> setTitle) 
    { 
    setTitle ("Deneme"); 
    } 

編輯解釋代表

Action參數

上的MyMethod Action參數本質上是包含可以運行代碼的變量。 (爲了完全理解這個概念的確需要一些小小的扭曲。)該類型的<string>部分表示,我們可以將字符串傳遞給將要運行的代碼。

然後行去

setTitle ("Deneme"); 

調用此代碼,並將其傳遞文本「Deneme」。這是您要設置Windows標題的文本。現在,MyMethod方法實際上並不知道它將把Windows標題設置爲這個文本。這已成爲來電者的責任。 (如果你想MyMethod是絕對肯定的是,它被設置窗體的標題,然後第一個解決方案是一個你想要的。)

調用

方法的主叫用戶呼叫

MyMethod(title => this.Title = title); 

到的MyMethod的參數是:

title => this.Title = title 

這是要傳遞的代碼到Action變量。 =>左側的title是將調用代碼時傳遞給它的字符串的變量,而=>右側的內容是被調用的代碼。

所以,當表單調用MyMethod時,它說我想要那個字符串,我將把它的標題設置爲它。

這樣的美是MyMethod不知道表單。如果您希望在編寫控制檯應用程序時重新使用您的課程,您可以撥打:

MyMethod (title => Console.WriteLine (title)); 

MyMethod根本不需要觸及!

+0

我沒有看到你使用委託的例子。除了運行它之外,'MyMethod'不能對代理做任何事情,它不會從中得到任何結果或任何結果。因此這是非常無用的調用。我建議你增加另一個顯示代表權力的例子或者刪除它。請記住,OP是編程的新手,可以委託一些更復雜的主題。 – jgauffin 2011-05-24 15:06:27

+0

看我的解釋。在這種情況下,所有MyMethod都需要處理代理,它只是將一些數據傳回給調用方法。這取決於呼叫者根據需要做什麼。這是一個簡單的例子,除非你意識到這可以解決更復雜的情況,否則完整的功能是不會顯而易見的! – 2011-05-24 15:29:11

+0

極好的更新。我已經給你+1 – jgauffin 2011-05-24 17:22:37

1

你可以嘗試:

public class SampleClass 
{ 
    public void MyMethod(Form sender) 
    { 
     sender.Text = "title"; 
    } 
} 
+0

不好的例子。除了表單之外,這個方法會被打破。如果預期表單,請使用Form參數。 *編輯:*'如果你需要你可以使用Sender.GetType()'。不可以,因爲沒有辦法知道支持什麼類型的對象,所以在未來構建的方法會打破。改用超載。 – jgauffin 2011-05-24 14:52:18

+0

@jgauffin:他告訴他必須從類中調用這個方法,而不僅僅是形式! _ //當Form1或另一個類調用此Method_時。刪除downvote,來吧,我的帖子是正確的;) – Marco 2011-05-24 14:54:15

+0

閱讀我編輯的評論。你不會以一種結構良好的方式給他想要的東西。你在未來給他帶來痛苦。 – jgauffin 2011-05-24 14:55:08

相關問題