我的意思是,如果我定义了一个类
class Square
{
public Square(int x, int y)
{
}
}
我做了。
Square s = new Square(5,5);
int a = s.Calc.Radios();
我如何处理Calc
部分。
就像班上的一个班级一样。
答案 0 :(得分:3)
您需要在类方块中声明calc
public calculator calc = new calculator();
然后你就可以使用s.calc.radios();
答案 1 :(得分:1)
声明一个单独的(或嵌套的)Calc类,并在该类的class square中创建一个属性calc。您可以通过私有集在square的构造函数中初始化该属性。
class Square
{
public Calc Calc { get; private set;
...
public Square()
{
this.Calc = new Calc();
}
}
答案 2 :(得分:0)
在c#中,您无法向初始化对象添加属性。
c#是stronly typed,因此无法在运行时装饰对象,例如在某些弱类型语言中,例如JavaScript。
您可以使用扩展名方法扩展声明的对象。例如
public static class SomeStaticClass
{
public Calc Calc(this Square square)
{
return new Clac(...
}
}
您仅限于扩展方法,而不是属性。
只要引用中有SomeStaticClass
,Square
的实例就会有Calc
方法返回Calc
对象,无论是什么。
如果Square
不是sealed
,您可以继承来制作具有Square
属性的新类型Calc
,例如
public class SqaureWithCalc : Square
{
public SquareWithCalc(int x, int y) : base(x, y)
{
}
public Calc Calc { get; set; }
}
所以你可以做到,
var s = new SquareWithCalc(5, 5);
或者,最简单的是,因为你控制代码,你可以编辑它。在线之间阅读,也许你想要类似的东西,
public struct Square
{
private readonly int x;
private readonly int y;
public Square(int x, int y)
{
this.x = x;
this.y = y;
}
public int X
{
get
{
return this.x;
}
}
public int Y
{
get
{
return this.y;
}
}
public static IEnumerable<Radio> CalculateRadios(Square square)
{
// Do stuff,
//// yield return radio;
// in a loop.
}
public IEnumerable<Radio> CalculateRadios()
{
return CalculateRadios(this);
}
}
答案 3 :(得分:0)
您只需将Calc设为Square类的属性即可。
另一个评论是,我可能会按照以下方式设计它:
square.PerformSomeCalcMethod();
其中
public void PerformSomeCalcMethod()
{
// Use internal calc object.
}
这将允许您更改此方法的内部工作方式,而无需更改任何耦合到Calc属性的客户端。