gpt4 book ai didi

c# - 使用结构而不是给构造函数 8 个参数是否正确?

转载 作者:行者123 更新时间:2023-11-30 13:57:05 25 4
gpt4 key购买 nike

我只是想,

如果我需要为Apartment 类编写构造函数,公寓类有几个属性,例如 ApartmentSizeNumberOfBedroomsNumberOfShowersCurrentMarketValuePurchasePrice

创建一个名为 ApartmentProperties 的结构并将上述所有属性作为该结构的成员是否更具可读性,所以当我需要 build 公寓时,构造函数只需要这个结构?

如果不是,那么更优雅的做法是什么?

最佳答案

看起来有点循环。您有一个对象,其构造函数需要所有这些值,因此您要创建一个对象来包含它们。所以现在你有一个需要所有这些值的结构......你如何创建结构?

你提议:

ApartmentProperties props = new ApartmentProperties(size, numBedrooms, numShowers, marketValue, purchasePrice);
Apartment apt = new Apartment(props);

这样做似乎没有什么不同:

Apartment apt = new Apartment(size, numBedrooms, numShowers, marketValue, purchasePrice);

如果这是您唯一一次使用 ApartmentProperties struct,而你所做的只是将这些值全部放入其中,将其传递给构造函数,然后再次将它们拉出,然后感觉没有必要。这只是另一个需要考虑的对象。

在评论中有人建议,如果您不喜欢在构造函数中使用这么多参数,那么您可以这样做:

Apartment apt = new Apartment();
apt.Size = size;
apt.NumBedrooms = numBedrooms;
apt.Numshowers = numShowers;
apt.MarketValue = marketValue;
apt.PurchasePrice = purchasePrice;

我不太喜欢这种方法。现在您的构造函数更小更整洁了,是的,但是您所做的只是将整齐地包裹在其中的逻辑移到您调用它的任何地方。这使得调用代码负责确保正确分配所有属性。我建议将赋值留在构造函数中——它只是让你假设一个 Apartment对象已分配其属性,因为您知道构造函数会完成它。

当然,有一个中间立场。您可以取出一些 构造函数参数,只留下那些必须 存在的参数。例如,一套公寓总是有大小、卧室数量和淋浴间数量,但您可能不知道它的当前值(value)或购买价格——也许有人在那里住了一段时间并且没有最近有估值。在这种情况下,您可以将构造函数缩减为仅三个参数,并允许调用代码分配其他已知参数。或者更好的是,用不同数量的参数重载构造函数。只要确保您有某种方法可以确定是否已分配一个值(例如,可能会有一些奇怪的情况,其中销售价格为零是有效的,但也许您知道 -1 永远不会有效).如果您真的需要确定,请使用 Nullable<T>如果尚未分配,则返回 null。

关于c# - 使用结构而不是给构造函数 8 个参数是否正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23169674/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com