类如何在C#中识别自己的对象

本文关键字:识别 自己的 对象 | 更新日期: 2023-09-27 18:27:03

我有一个类。在c#中,有没有某种方法(我可以在静态方法中实现)可以识别这个类的对象,并由其他(调用)类实例化?

场景实际上,我有一个Country类,它包含一个成员Rectangle(有4个坐标)。我想写一个静态方法,当传递一个点或向量2d时,在Country的每个实例化对象中搜索该点,并可以返回该对象的ref。我有矩形。包含(点)方法,该方法告诉该点是否位于调用矩形中。

类如何在C#中识别自己的对象

您必须将类的所有实例存储在集合中,并搜索集合以找到所需的特定对象。

可以使此集合成为类的静态成员,但它不需要。它可以作为另一个类的普通成员存储在其他地方。例如,如果您有一个用于构造Country对象的CountryFactory,那么每当工厂构造一个国家/地区时,它也可以在工厂内部的集合中存储对该国家/地区的引用。

还请记住,当您不再需要国家/地区时,请将其从集合中删除,否则它将不会被垃圾收集(或使用WeakReference)。

一种方法是让点引用其父矩形,然后矩形引用其父国家。那么静态函数就是:

public Country FindCountry(Point p)
{
    return p.Rectangle.Country;
}

当然,如果需要的话,可以对null等进行检查。

为什么它必须是一个静态方法?

为了解决这个问题,你需要一个所有国家的集合,你可以循环浏览并对照一个点检查每个国家。如何保管这些藏品取决于你自己。你可以将它存储在某个对象中。它可以是Country类中的一个静态列表,当使用构造函数创建新的Country时,它们会被添加到列表中,或者列表可以只是一个固定的静态列表,或者它可以在某个工厂中创建Country对象,并在创建时存储对它们的引用。这可能取决于什么最适合你的国家目前的创建方式。保留已创建对象的列表需要注意的一点是,当不再需要它们时,需要将它们从列表中删除,以便对它们进行垃圾收集,否则它们的内存将永远不会被释放。

你可以在Country上有一个方法,你通过一个点,它会返回它的矩形是否包含该点,或者你可以从国家和外部暴露矩形。

我不知道有什么内置的方法可以获取一个类的所有对象
我所知道的最好的方法就是使用一个充满所有对象的静态字典(或其他集合类型)。像这样:

private static Dictionary<string /*name*/, Country> _countryDict =
  new List<Country>
    {
      new Country("Country1", new Rectangle(100, 200, 100, 100)),
      new Country("Country2", new Rectangle(200, 200, 100, 100))
    }.ToDictionary(c => c.Name);

但我想你已经朝着这个方向思考了。