C# 使用其他类的类字段
我对C#和OOP很陌生,所以请容忍我 我有两个具有不同名称空间的类:C# 使用其他类的类字段,c#,oop,class,C#,Oop,Class,我对C#和OOP很陌生,所以请容忍我 我有两个具有不同名称空间的类: namespace Class1 public class class1 { public double x; public double y; } ... namespace Class2 public class class2 { public double z = x + 5; } 我已经创建了一个名为add的项目,并且有一个带有按钮的表单。该按钮将添加x、y和z。我的问题是: 如何在class2中使用字
namespace Class1
public class class1
{
public double x;
public double y;
}
...
namespace Class2
public class class2
{
public double z = x + 5;
}
我已经创建了一个名为add的项目,并且有一个带有按钮的表单。该按钮将添加x、y和z。我的问题是:
如何在class2中使用字段x,以及如何在按钮单击事件下使用字段x、y和z 您不使用类字段(除非它们是静态的,但在您的情况下不是),而是使用对象字段。下面是一个例子,说明如何实现您的目标
public class1 {
public double Radius;
// Function to calculate the area
public double Area(double Rad) {
this.Radius = Rad;
return Math.PI * Math.Pow(this.Radius, 2);
}
}
public class2 {
public double Depth;
// Function to calculate the volume of a cylinder
public double Volume(double Rad, double Dep) {
this.Depth = Dep;
// Create an instance of Class1 and use it to calculate the Volume
var Obj1 = new class1();
return Obj1.Area(Rad) * this.Depth;
}
}
如何在按钮单击事件中使用上述内容
// Let's calculate an Area from a Radius
double SomeRadius = 1.234;
MyObj1 = new class1();
double Area = MyObj1.Area(SomeRadius);
double StoredRadius = MyObj1.Radius; // This will give you back the Radius stored by MyObj1, which is the same you passed to Area() function
// Now let's calculate a Volume, using the Radius we indicated earlier and a Depth
double SomeDepth = 4.567;
MyObj2 = new class2();
double Volume = MyObj2.Volume(SomeRadius, SomeDepth);
double StoredDepth = MyObj2.Depth; // This will give you back the Depth stored by MyObj2, which is the same you passed to Volume() function
您可能希望
class2
在其构造函数中获取class1
的一个实例:
public class class2
{
private readonly class1 _c1;
public class2(class1 c1) { _c1 = c1; }
public double z = _c1.x + 5;
}
至于如何在表单中通过按钮单击事件使用字段x、y和z,您只需访问class1和class2实例上的公共字段x、y和z即可:
protected void button_click(){
class1 c1 = new class1();
c1.x = 10;
c1.y = 20;
class2 c2 = new class2(c1);
//do something with c1 and c2 now...
Console.WriteLine("{0} {1} {2}", c1.x.ToString(), c1.y.ToString(), c2.z.ToString());
}
如果我误解了你的意图,请告诉我。希望这有帮助 在
class2
中,您需要从class1
public class class2
{
class1 class1 = new class1();
public double z = class1.x + 5;
}
这里的每个人都为您提供了访问字段的正确答案,但是在面积和体积的情况下,您是以过程而不是面向对象的方式处理问题的。这是一个演示如何访问内部字段的示例,以及处理此类问题的OO方法:
public abstract class Shape
{
public abstract double Area();
public abstract double Perimeter();
}
public class Circle : Shape
{
public double Radius;
public override double Perimeter()
{
return 2 * Radius * Math.PI;
}
public override double Area()
{
return Radius * Radius * Math.PI;
}
}
public class Square : Shape
{
public double Side;
public override double Perimeter()
{
return Side * 4;
}
public override double Area()
{
return Side * Side;
}
}
public abstract class Solid
{
public abstract double Volume();
}
public abstract class CircleBaseSolid : Solid
{
protected Circle Base = new Circle();
public double Radius
{
get { return Base.Radius; }
set { Base.Radius = value; }
}
public double Height;
}
public class Cylinder : CircleBaseSolid
{
public override double Volume()
{
return Base.Area() * Height;
}
}
public class Cone : CircleBaseSolid
{
public override double Volume()
{
return Base.Area() * Height / 3;
}
}
public abstract class SquareBaseSolid : Solid
{
protected Square Base = new Square();
public double Side
{
get { return Base.Side; }
set { Base.Side = value; }
}
public double Height;
}
public class SquareParallelepiped : SquareBaseSolid
{
public override double Volume()
{
return Base.Area() * Height;
}
}
public class SquarePyramid : SquareBaseSolid
{
public override double Volume()
{
return Base.Area() * Height / 3;
}
}
退一步,定义类实际代表的内容。它们不仅仅是一堆堆变量
class1
和class2
自然没有任何意义。您试图实现的目标可能有多种方式,但作为“OOP新手”,我们应该专注于确定正确的方式。那么,除了一个人为的例子之外,你的类要表示什么物理或概念对象呢?我有两个类,其中class1中的变量需要在class2中使用。例如,area=PI*r^2是class1中的一个方法。体积=面积*深度是class2中的一种方法。另外,我有一个带按钮的表单,可以计算面积和体积。我试图解决的是如何在class1和class2中使用r,然后在button事件中使用这些变量。我希望这更清楚。感谢您的初步回复。在您的澄清后,我更新了我的答案,希望能有所帮助。:)@user1580591:“面积=π*r^2”和“体积=面积*深度”-不过,我想说的是,这些听起来不像是有意义的阶级区分。在几何体的情况下,每个单独的完整形状可能都是一个类。因此,如果有某个三维对象被建模,它本身就是一个类。它的各种尺寸和测量值将是该类别的属性(静态或计算)。能够互相访问类是OOP的一个方面,但是能够有意义的类区别确实是第一位的。类的声明中没有什么?你在类外声明变量,他想访问类内的变量。我正在实例化对象以使用类,它显示了如何使用对象的属性。这回答了他提出的关于在方法中使用x,y和z的问题。现在他更新了这个问题,这让事情更清楚了。啊,我现在明白了,我已经编辑了,以确保它对未来的观众来说更清楚。谢谢你的回答,大卫。这就是我想做的。很高兴我能帮上忙。如果这回答了你的问题,别忘了把它标记为答案。这将有助于你的录取率,这将吸引更多关于未来问题的高质量答案。谢谢