Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#如何从一个类实例化的另一个类访问该类的方法?_C#_Class_Oop_Methods - Fatal编程技术网

C#如何从一个类实例化的另一个类访问该类的方法?

C#如何从一个类实例化的另一个类访问该类的方法?,c#,class,oop,methods,C#,Class,Oop,Methods,我有两个类,其中一个类类似于主类,还有一个从主类实例化的辅助类。我怎样才能从第二个类使用主类的方法。这里的代码给出了我想要的一个例子 public class MainClass { private SecondaryClass secondaryClass; private int testValue; public MainClass() { this.secondaryClass = new SecondaryClass();

我有两个类,其中一个类类似于主类,还有一个从主类实例化的辅助类。我怎样才能从第二个类使用主类的方法。这里的代码给出了我想要的一个例子

public class MainClass
{
    private SecondaryClass secondaryClass;
    private int testValue;

    public MainClass()
    {
        this.secondaryClass = new SecondaryClass();
        testValue = 0;
    }

    public void updateTestValue (int val)
    {
        testValue = val;
    }
}

public Class SecondaryClass : Form
{
    public SecondaryClass() 
    {

    }

    private void button1_click(Object sender, EventArgs e)
    {
        // I want to be able to do this:
        primaryClass.updateTestValue(100);
    }

}一个类只能有一个基类

您可以做的是将:Form基类向上移动到primary类,然后从secondary类将它的基类作为primary类,并使用如下函数

public class PrimaryClass : Form
{
    private int testValue;

    public void PrimaryClassMethod()
    {
        Console.WriteLine("Method from Primary Class");
    }

    public void UpdateTestValue (int val)
    {
        testValue = val;
    }
}

public class SecondaryClass : PrimaryClass
{
    public void CallPrimaryClassMethod()
    {
        this.PrimaryClassMethod();
        this.UpdateTestValue(10000);
    }

}

一个类只能有一个基类

您可以做的是将:Form基类向上移动到primary类,然后从secondary类将它的基类作为primary类,并使用如下函数

public class PrimaryClass : Form
{
    private int testValue;

    public void PrimaryClassMethod()
    {
        Console.WriteLine("Method from Primary Class");
    }

    public void UpdateTestValue (int val)
    {
        testValue = val;
    }
}

public class SecondaryClass : PrimaryClass
{
    public void CallPrimaryClassMethod()
    {
        this.PrimaryClassMethod();
        this.UpdateTestValue(10000);
    }

}

您可以使类进行通信,而不必从一个类派生另一个类

public class MainClass
{
    private SecondaryClass secondaryClass;
    private int testValue;

    public MainClass()
    {
        this.secondaryClass = new SecondaryClass(this.UpdateTestValue);
        testValue = 0;
    }

    public void UpdateTestValue (int val)
    {
        testValue = val;
    }
}

public class SecondaryClass : Form
{
    private Action<int> UpdateValue { get; }

    public SecondaryClass(Action<int> updateValue) 
    {
        this.UpdateValue = updateValue;
    }

    private void button1_click(Object sender, EventArgs e)
    {
        this.UpdateTestValue(100);
    }
}

此解决方案的价格是系统中的一种附加类型(interface
IListener
),其好处是可以避免使用委托语法。委托有一个缺点,即它们的参数没有名称,因此如果将它们混淆,很容易产生错误。

可以使类进行通信,而不必从一个派生另一个

public class MainClass
{
    private SecondaryClass secondaryClass;
    private int testValue;

    public MainClass()
    {
        this.secondaryClass = new SecondaryClass(this.UpdateTestValue);
        testValue = 0;
    }

    public void UpdateTestValue (int val)
    {
        testValue = val;
    }
}

public class SecondaryClass : Form
{
    private Action<int> UpdateValue { get; }

    public SecondaryClass(Action<int> updateValue) 
    {
        this.UpdateValue = updateValue;
    }

    private void button1_click(Object sender, EventArgs e)
    {
        this.UpdateTestValue(100);
    }
}

此解决方案的价格是系统中的一种附加类型(interface
IListener
),其好处是可以避免使用委托语法。代理有一个缺点,即他们的参数没有名称,因此,如果将它们混在一起,很容易产生错误。

我如何才能将多个操作传递到类中?可以通过使用多个参数构造SecondaryClass,然后从PrimaryClassis传递它们来传递操作。我已经添加了基于接口的第二个解决方案。这个接口可以公开多个方法,然后第二个类将只有一个参数。这就足够了,它可以随时调用所需的任何方法。非常感谢,这正是我需要的接口。我如何才能将多个操作传递到类中?你可以通过构造带有多个参数的SecondaryClass,然后从PrimaryClassis传递来传递它们。我已经添加了基于接口的第二种解决方案。这个接口可以公开多个方法,然后第二个类将只有一个参数。这就足够它在需要的时候调用它所需要的任何方法了。非常感谢,这正是我需要的接口。