在 C# 中使用对象
本文关键字:对象 | 更新日期: 2023-09-27 18:33:21
我有3个不同的对象,让我们称它们为:盒子,正方形,三角形。现在,我想创建一个需要传递对象的更新函数。据我所知,该函数看起来像这样
void Update(Box box, Square square, Triangle triangle)
{
//do something
}
这将要求我传递所有三个对象,即使有时我只想更新其中一个。我知道的另一种方法是初始化以前在构造函数中的对象,并将它们传递到类内部的私有变量中。然后我会更新所有对象,无论我是否要更新所有对象。
void Update()
{
//do something for Box
//do the same for Square
//do the same for Triangle
}
这将需要大量代码,有时是不必要的。现在,有什么方法可以传递我想要的任何对象并执行相同的代码。例如
void Update(Object randomObject)
{
//do something for the randomObject whether its Square, Box or Triangle
}
您可以使用基类或接口为对象定义通用接口。对于您的示例,您可以有一个Shape
基类:
public abstract class Shape
{
// Put common methods here, possibly abstract:
public abstract double Area();
}
然后将具体形状定义为形状的继承者:
public class Box : Shape
{
public double Area() { return _width * _height; }
}
// etc.
然后,您可以让 Update
方法采用 Shape 参数。该参数现在可以是继承Shape
的任何类,您可以使用在 Shape
上定义的任何方法
void Update(Shape shape)
{
}
在此上下文中,抽象意味着实现被推迟到具体的实现中,因此您需要在具体类中提供实现 - 例如Box
类中的Area
实现 - 但当然,您也可以在基类中定义非抽象方法。
是的,使用OO编程的主要功能之一 - 多态性。您的三个类应继承自同一个基类。在该类中实现方法更新。多态性
我不知道
你的场景细节,但你可以做这样的事情:
void Update(Box box = null, Square square = null, Triangle triangle = null)
{
if(box !=null)
{
//Do box update
}
if(square !=null)
{
//Do square update
}
if(triangle !=null)
{
//Do triangle update
}
}
您可以只为一个或两个对象调用此方法
Update(square: mysquare);
无论如何,如果您可以操纵模型设计以使所有三个类都继承一个基类,那就更好了。