在 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 
}

在 C# 中使用对象

您可以使用基类接口为对象定义通用接口。对于您的示例,您可以有一个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);

无论如何,如果您可以操纵模型设计以使所有三个类都继承一个基类,那就更好了。