正在实例化集合



我正在努力理解

private Queue<IProductable> inventory { get; set; }

它用于下面的整个代码中。我只习惯于看到使用简单类型定义的属性;所以,这真的让我很困惑。此外,我很好奇为什么类Factory(下面)的构造函数使用:

inventory = new Queue<IProductable>();

代替:

Queue<IProductable> inventory = new Queue<IProductable>();

我的理解是,当实例化一个新对象时,应该执行以下操作:CLASS/TYPE newObjectName = new CLASS/TYPE。构造函数是否正在实例化一个新的"inventory"对象?如果是这样,为什么我不必指定对象"inventory"的类型(以便使用它来调用通用Collections类Queue中的方法)。

总之,下面是代码。我希望有人能以最简单的方式解释这一点,让我理解/记住我将来需要做类似的事情。

namespace codeExample
{
class Factory
{
private Queue<IProductable> inventory { get; set; }
public Factory()
{
inventory = new Queue<IProductable>();
}
public IProductable GetOldestItem()
{
IProductable oldestItem = inventory.First();
return oldestItem;
}
public IProductable GetNewestItem()
{
IProductable newestItem = inventory.Last();
return newestItem;
}
public void Add(IProductable productToAdd)
{
inventory.Enqueue(productToAdd);
}
}
}

我的理解是,当实例化一个新对象时,应该执行以下操作:class/TYPE newObjectName=new class/TYPE。构造函数是否正在实例化一个新的"inventory"对象?

如果包含该类型,则它将创建一个新的局部变量。目前,代码没有创建新的变量,而是使用属性,该属性是该类实例数据的一部分(至少在这种情况下)。该地产(在这种特定情况下)的行为几乎与私人领域完全一样。它正在创建一个在整个对象的生命周期内存在的变量,而不仅仅是一个方法。

构造函数是否实例化了一个新的"inventory"对象?

它正在创建一个新的队列对象,是的。属性定义定义了队列的存储位置,但它不会创建实际的队列。构造函数实际上创建了一个队列(它是空的),并将is分配给变量。

private Queue<IProductable> inventory { get; set; }声明了一个自动实现的属性,但它也可能是一个字段:

private Queue<IProductable> inventory;

这声明了一个private实例变量,您可以从该类中的任何方法访问该变量,但不能从派生类或类外访问。

您的代码在构造函数中分配一个值,该值总是在类中的其他代码之前运行:

inventory = new Queue<IProductable>();

因此,现在您可以从这个类的任何位置访问inventory

我只习惯于看到用简单类型定义的属性;所以,这个真的让我困惑

为什么?您可以定义任何类型的属性。

此外,我很好奇为什么类Factory的构造函数(如下)用途:

您不能再次定义属性的类型,因为它是类属性,所以在当前作用域中已经可用。其类型在private Queue<IProductable> inventory { get; set; }线上定义

我的理解是,当您实例化一个新对象时,应该执行以下操作:CLASS/TYPE newObjectName=新CLASS/TYPE

不,这里有两行中的一个简单反例:

MyType myVariable;
...
myVariable = new MyType();
private Queue<IProductable> inventory { get; set; }

是自动属性。

它相当于

private Queue<IProductable> _inventory;
public Queue<IProductable> Inventory 
{
get { return _inventory; }
set { _inventory = value; }
}

因此,您只声明了一个成员清单,然后实例化一个Queue<IProductable>,并将其引用存储到自动属性inventory

inventory = new Queue<IProductable>();

private Queue<IProductable> inventory { get; set; }是一个自动属性。get/set的实现由编译器提供。

Queue<IProductable> inventory = new Queue<IProductable>();

现在,inventory是一个字段。房地产有后备存储,比油田更聪明。它们允许程序员在获取/设置操作期间进行工作。

构造函数是否实例化了一个新的"inventory"对象?

是的,在该示例中,构造函数正在设置隐藏变量(后备存储)。

如果是,为什么我不必指定对象"inventory"的类型(以便使用它从泛型Collections中调用方法类、队列)。

因为您没有在构造函数中声明新变量。我们正在设置属性。

在这里,您可以使用字段而不是属性。然而,我希望"高级类"/Factory使用依赖注入,因此公共属性在这种情况下是有意义的。(也许你简化了原始代码?)

最新更新