C#如何学习在另一堂课中调用我的方法的班级

时间:2011-05-24 14:44:48

标签: c#

public class Form1:Form
{

     public Form1()
     {

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

这是我项目的第一堂课,其次是

大家好

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?

       }
   }

2 个答案:

答案 0 :(得分: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");
   }

编辑以解释代表

动作参数

MyMethod上的Action参数本质上是一个包含可以运行的代码的变量。 (完全理解这个概念确实需要一点点扭曲。)该类型的<string>部分表示我们可以将字符串传递给将要运行的代码。

然后是行

 setTitle ("Deneme");

调用此代码并将文本传递给“Deneme”。这是您要将Windows标题设置为的文本。现在,MyMethod方法实际上并不知道它将把Windows标题设置为此文本。这已成为来电者的责任。 (如果您希望MyMethod绝对确定它正在设置表单的标题,那么第一个解决方案就是您想要的解决方案。)

<强>调用

方法的调用者调用

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

MyMethod的参数是:

title => this.Title = title

这是您传递给Action变量的代码。 title左侧的=>是调用代码时将传递给它的String变量,而=>右侧的内容是被调用的代码。

因此,当表单调用MyMethod时,它表示我想要该字符串,并且我将设置我的标题。

这就是MyMethod不知道形式的美妙之处。如果要在编写控制台应用程序时重用您的类,可以调用:

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

MyMethod根本不需要触及!

答案 1 :(得分:1)

你可以尝试:

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