从其他类调用变量

本文关键字:变量 调用 其他 | 更新日期: 2023-09-27 17:50:11

这可能很简单,但我总是只做一个大的类,从来没有尝试过做clean代码。现在我正在尝试并遇到错误…

所以,这就是思路:

class1
{
    method1 { value 1; value 2 }
    method2 { value 3; value 4 }
    method3 { uses method4 from class2 }
}
class2
{
    method4 { uses values 1-4 from class1 }
}

我是通过调用:class1 c1 = new class1()在method4和class2 c2 = new class2在method3。

结果如下:

  • method1, method2产生values 1-4
  • method3 calls class2 c2 = new class2
  • 我进入class2,然后进入method4并获得null/0值,而不是我在第一步所做的。

从其他类调用变量

不是在method4中创建class1的新实例,而是将当前的class1实例(可以通过method3中的this访问)作为参数传递给该方法,以获得相同的结果。

你需要更具体…

    class Class1
    {
        Class2 _class2;
        public Class1(Class2 class2)
        {
            _class2 = class2;
        }
        public void method3()
        {
            //call _class2.method4()
        }
    }
    class Class2
    {
        Class1 _class1;
        public Class2(Class1 class1)
        {
            _class1 = class1;
        }
        public void Method4()
        {
            //call _class1.MethodWhatever()
        }
    }

所以当你需要访问类中的变量时,你显然可以通过'public'修饰符来做到这一点,然而下面的例子不是最佳实践,但我们很快就会讨论到…

public class MyTestClass
{
    public int MyAge;
}

这是一个字段—字段实际上应该是私有的,我们应该使用属性来公开该字段。但是,如果你这样做了,那么你可以像这样访问它:

var foo = new MyTestClass();
var hisAge = foo.MyAge;

当然,根据您的需求,您可能不希望用户直接访问变量,而是希望在对其他变量进行一些计算后获得一个值。

你可以这样做:

public class MyTestClass
{
    private int _gamesPlayed;
    private int _gamesLost;
    public int NumberOfWins { get { return _gamesPlayed - _gamesLost; } } 
}

NumberOfWins属性。它计算两个字段的值并返回。看看我们是如何使用私有修饰符的,这些在那个类的作用域之外是看不到的。NumberOfWins的访问方式与前面示例中的MyAge相同。

老实说,听起来你更像是在使用伪代码,或者是一个初学者。

我建议你看看下面的文章,以获得更多关于我所说的信息。

  • Modifiers - c# Reference

  • c#中字段和属性的区别

真的不清楚您想要实现什么,以及class1如何连接到class2。如果你的class2只对第一个类有用,那么(也只有这样)你可以使用嵌套类…

class OuterClass {
    string value1;
    string value2;
    string value3;
    // ...
    class InnerClass 
    {
      OuterClass o_;
      public InnerClass(OuterClass o) 
      {
         o_ = o; 
      }
      public string GetOuterString()
      { 
        return o_.value1 + o.value2 + o.value3; //... 
      }
    }
    void SomeFunction() 
    {
       InnerClass i = new InnerClass(this);
       i.GetOuterString();
    }

}

这将创建一个从内部类(类2)到外部类的明确绑定。但这并不容易。

编辑:好的,经过你的编辑,我看到了一个完全不同的故事。

下面是一些代码。我不确定这是不是你所需要的。不过,它可能会帮助你开始。你可以试着在这里运行:https://dotnetfiddle.net/#

这是Class1。它通过属性公开它的一些数据。

public class Class1
{
    // these are properties
    public int Value1 { get; set; }
    public int Value2 { get; set; }
    public int Value3 { get; set; }
    public int Value4 { get; set; }
    public void Method1()
    {
        Value1 = 1;
        Value2 = 2;
    }
    public void Method2()
    {
        Value3 = 3;
        Value4 = 4;
    }
    public void Method3()
    {
        // uses method4 from class2 
        var c = new Class2();
        c.Method4();
    }
}

这是Class2。它调用Class1中的方法并访问其属性。

public class Class2
{
    public void Method4()
    {
        //uses values 1-4 from class1 
        var c = new Class1();
        c.Method1();
        c.Method2();
        Console.WriteLine(c.Value1);
        Console.WriteLine(c.Value2);
        Console.WriteLine(c.Value3);
        Console.WriteLine(c.Value4);
    }
}

同时使用close并显示结果:

using System;
public class Program
{
    public static void Main()
    {
        var c1 = new Class1();      
        c1.Method3();
    }
}