4

私は C# と OOP にまったく慣れていないので、ご容赦ください。

名前空間が異なる 2 つのクラスがあります。

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 を使用する方法を教えてください。

4

4 に答える 4

2

おそらく、そのコンストラクター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());
}

あなたがやろうとしていることを誤解している場合はお知らせください。お役に立てれば!

于 2012-08-07T01:05:09.390 に答える
1

クラスフィールドは使用しませんが(静的でない限り、しかしあなたの場合はそうではありません)、オブジェクトフィールドを使用します。これは、あなたが望むものを達成する方法の例です。

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
于 2012-08-07T01:04:35.503 に答える
0

ここにいる全員がフィールドにアクセスするための正しい答えを出しましたが、面積とボリュームの場合、オブジェクト指向の方法ではなく、手続き的に問題に取り組んでいます。これは、内部フィールドにアクセスする方法と、この種の問題にアプローチするオブジェクト指向の方法を示す例です。

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;
    }
}
于 2012-08-07T08:20:23.633 に答える
0

からオブジェクトを作成するclass2必要がありますclass1

public class class2
{
class1 class1 = new class1(); 

public double z = class1.x + 5;
}
于 2012-08-07T01:06:33.777 に答える