2011-05-24 29 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

相关问题