C#从其他类调用变量

C#从其他类调用变量,c#,class,oop,methods,call,C#,Class,Oop,Methods,Call,这可能很简单,但我一直只创建了一个大类,从未尝试过创建干净的代码。现在我正在尝试并经历错误 因此,这是一个想法: class1 { method1 { value 1; value 2 } method2 { value 3; value 4 } method3 { uses method4 from class2 } } class2 { method4 { uses values 1-4 from class1 } } 我在方法4中调用:class1c1=

这可能很简单,但我一直只创建了一个大类,从未尝试过创建干净的代码。现在我正在尝试并经历错误

因此,这是一个想法:

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

class2
{
    method4 { uses values 1-4 from class1 }
}
我在方法4中调用:
class1c1=newclass1()
,在方法3中调用
class2c2=newclass2

这就是发生的情况:

  • method1
    method2
    产生
    值1-4
  • 方法3调用
    class2 c2=newclass2
  • 我进入
    class2
    ,然后进入
    method4
    ,得到null/0值,而不是我在第一步中得到的值

因此,当您需要访问类中的变量时,您显然可以通过“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相同

老实说,听起来您更喜欢使用伪代码,或者您是一个初学者

我建议查看以下文章,了解更多关于我所说内容的信息


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

好的,这里有一些代码供您使用。我不确定这是否是你所需要的。不过,这可能会帮助你开始。您可以在此处尝试运行它:

这是
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();
    }
}
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);
    }
}
这是
Class2
。它从
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();
    }
}
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);
    }
}
这将同时使用关闭和显示结果:

using System;

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

你需要更具体一些。。。

一班
{
类别2(u类别2);;
公共一级(二级二级)
{
_类别2=类别2;
}
公开作废方法3()
{
//调用_class2.method4()
}
}
二级
{
1类(u类);
公共2级(1级)
{
_class1=class1;
}
公开作废方法4()
{
//调用_class1.MethodWhatever()
}
}

您想要实现什么,以及class1如何链接到class2,现在还不清楚。如果您的类2只对第一个类有用,那么(并且只有在那时),您可以使用嵌套类

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)到外部类的清晰绑定。但这并不容易


编辑:好的,编辑后我看到一个完全不同的故事。

你确定这是c#吗?如果你想共享数据,那么这些应该是类属性,而不是局部变量
class1
将需要一个
class2
的实例(例如
class2 c2=new class2()
使用它的方法和属性。你能发布一些实际的代码,而不是一些很难理解的伪代码吗?不要担心,如果它错了,我们可以修复它。你可以不展示想法,而展示实际的代码吗?@RonBeyer是的,我会做编辑。请改为使用
MyAge
属性。谢谢你的提示,我想我是慢慢地了解我应该做什么,同时我添加了代码,如果你想看看它会很棒,给我一些如何将一些值更改为属性的提示。谢谢你的提示,我想我正在慢慢地了解我应该做什么,同时我添加了代码,如果你想看看它会很棒,给我一些如何更改的提示将一些值转换为属性是的。您必须重写代码。您最初发布的代码实际上不是C#代码。它是其他语法。