C# 从其他 类 调用变量
C# Calling variables from other classes
这可能很简单,但我一直只是做一个大class而从未尝试过制作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 }
}
我通过调用方法 4 中的 class1 c1 = new class1()
和方法 3 中的 class2 c2 = new class2
来实现。
事情是这样的:
method1
, method2
产生 values 1-4
- 方法 3 调用
class2 c2 = new class2
- 我进入
class2
,然后进入 method4
并获得 null/0 值,而不是我在第一步中所做的值。
因此,当您需要访问 class 中的变量时,您显然可以通过 '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 是 属性。它计算我们两个字段的值并返回它。看看我们怎么有private修饰符,这些在那个class的范围之外是看不到的。 NumberOfWins 的访问方式与前面示例中的 MyAge 相同。
老实说,听起来你比较喜欢使用伪代码或者是初学者。
我建议查看以下文章以获取有关我所说内容的更多信息。
Difference between a Field and a Property in C#
与其在 method4
中创建 class1
的新实例,不如将当前 class1
实例(可通过 method3
内的 this
访问)作为此方法的参数以获得相同的结果。
好吧,这是给你的一些代码。我不确定这是你需要的。不过,它可能会帮助您入门。您可以在此处尝试 运行: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);
}
}
这同时使用了关闭和显示结果:
using System;
public class Program
{
public static void Main()
{
var c1 = new Class1();
c1.Method3();
}
}
你需要更具体...
<pre>
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()
}
}
</pre>
真的不清楚您想实现什么以及 class1 如何链接到 class2。如果您的 class2 仅对第一个 class 有用,那么(并且只有在那时)您可以使用嵌套的 classes...
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();
}
}
这将创建从内部 class (class 2) 到外部的清晰绑定。但这并不容易。
编辑:好的,在你的编辑之后我看到了一个完全不同的故事..
这可能很简单,但我一直只是做一个大class而从未尝试过制作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 }
}
我通过调用方法 4 中的 class1 c1 = new class1()
和方法 3 中的 class2 c2 = new class2
来实现。
事情是这样的:
method1
,method2
产生values 1-4
- 方法 3 调用
class2 c2 = new class2
- 我进入
class2
,然后进入method4
并获得 null/0 值,而不是我在第一步中所做的值。
因此,当您需要访问 class 中的变量时,您显然可以通过 '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 是 属性。它计算我们两个字段的值并返回它。看看我们怎么有private修饰符,这些在那个class的范围之外是看不到的。 NumberOfWins 的访问方式与前面示例中的 MyAge 相同。
老实说,听起来你比较喜欢使用伪代码或者是初学者。
我建议查看以下文章以获取有关我所说内容的更多信息。
Difference between a Field and a Property in C#
与其在 method4
中创建 class1
的新实例,不如将当前 class1
实例(可通过 method3
内的 this
访问)作为此方法的参数以获得相同的结果。
好吧,这是给你的一些代码。我不确定这是你需要的。不过,它可能会帮助您入门。您可以在此处尝试 运行: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);
}
}
这同时使用了关闭和显示结果:
using System;
public class Program
{
public static void Main()
{
var c1 = new Class1();
c1.Method3();
}
}
你需要更具体...
<pre>
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()
}
}
</pre>
真的不清楚您想实现什么以及 class1 如何链接到 class2。如果您的 class2 仅对第一个 class 有用,那么(并且只有在那时)您可以使用嵌套的 classes...
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();
}
}
这将创建从内部 class (class 2) 到外部的清晰绑定。但这并不容易。
编辑:好的,在你的编辑之后我看到了一个完全不同的故事..