房屋类可能具有一系列特征。
您基本上可以创建一个名为“Feature”的抽象基类或一个名为“IFeature”的接口,并将其继承/实现到旨在成为特性的类(即Garden
)。
然后您需要做的就是在House
名为“Features”的类中创建一个集合。
这是 C# 中的示例接口:
interface IFeature
{
// Properties or methods you want all the features to have.
decimal Price { get; }
}
您的要素类需要实现IFeature
接口。
class Garden : IFeature
{
// This property is needed to implement IFeature interface.
public decimal Price { get; private set; }
public Garden(decimal price) { Price = price; }
}
要实现IFeature
,一个类必须有一个decimal
名为“Price”的属性,并带有一个 get 访问器,如Garden
上面的Pool
类和下面的类:
class Pool : IFeature
{
public decimal Price { get; private set; }
public float Depth { get; private set; }
public Pool(decimal price, float depth) { Price = price; Depth = depth; }
}
House
类应该有一个集合 ofIFeature
而不是Pool
or Garden
:
class House
{
public List<IFeature> Features { get; private set; }
public House()
{
Features = new List<IFeature>();
}
}
然后,您可以像这样为房屋添加功能:
House h = new House();
h.Features.Add(new Garden(6248.12m));
h.Features.Add(new Pool(4830.24m, 10.4f));
使用 LINQ,您可以,
// Check whether the house has a garden:
h.Features.Any(f => f is Garden);
// Get the total cost of features.
h.Features.Sum(f => f.Price);
// Get the pools that are deeper than 5 feet.
h.Features.OfType<Pool>().Where(p => p.Depth > 5f);
// etc.
有关接口的更多信息。
有关 LINQ 的更多信息。