有点晚了,但这是我的分享。
我确信海报的意思是stateless object。拜托,人们不要让它变得如此戏剧化。
让我们开始吧。一些评论者询问了static。当在一个类中使用 static 时,应该谨慎使用,所有那些持有 static 关键字的成员现在都属于该类,而不是不再属于该对象。他们是班级的一部分。
例如:
用名为Name 的static 属性声明Person 类没有意义
public class Person
{
public **static** string Name { get; set; }
}
- 顺便说一下,静态的另一个词是“共享”,它在 VB.NET 中使用。
如果我们曾经在 Person 上设置了名称,那么该名称将在任何地方共享,因为它不属于对象,而是属于 类本身。在现实世界中,您不会称所有人为“Jhon”,也不会称所有客户为“Customer1”。每个人都有不同的名字、姓氏、电话、地址等。一旦我们设置了这些属性,这个对象就变成了有状态的,而不是无状态的。它具有名称、地址等。在类中定义的对象的属性使其具有状态。
这里的Name属性属于类,不属于对象:
Person.Name="Fili" //You would not call every person Fili in your application.
让我们通过删除 static 关键字来重新声明 Person 类:
public class Person
{
public string Name { get; set; }
}
在下面的示例中,对象是有状态的。它有一个状态,它被命名为“Jhon”,以后可以更改。例如,一个人可以将他的名字更改为 Jimmy。完成后,该对象的状态已从 Jhon 更改为 Jimmy。
//From
Person person1 = new Person {
Name = "Jhon";
}
//to
person1.Name = "Jimmy"
对象“person1”仍然是同一个对象,但它的状态已经改变。现在已经不一样了。它有一个不同的名称。
因此,person1 在某个时间点之前一直处于状态,但随后其状态发生了变化。现在,它处于不同的状态。
现在,创建一个新人是与 person1 无关的新事物。 Person2 有自己的状态。
Person person2 = new Person {
Name = "Imir";
}
使用静态类:Person.Name="Fili"它有一个状态,但它属于该类,它是到处共享的。
因此,无状态对象将是一个无需更改的对象,不具有值。你会创造一个没有名字的人吗?你会创建一个不存在的客户对象吗?不,当然不。当你为一个人或一个客户命名的那一刻,他们就有了一个状态。它们存在并且可以改变它们的状态。
以飞机为例。例如,当您删除它时,您会添加一个 Status 属性。
public class Airplane {
public string Status {get;set;}
}
var plane1 = new Airplane{ Status="Flying"};
那么,问题来了:此时飞机的状态(status)是什么?
有人会回答:它是“飞行”。如果将状态更改为“taxing”,那么它的状态是“taxing”,或者它是“stationary”,等等。