您怎么称呼没有方法的类?
例如,
class A
{
public string something;
public int a;
}
上面是一个没有任何方法的类。这种类型的班级是否有特殊名称?
您怎么称呼没有方法的类?
例如,
class A
{
public string something;
public int a;
}
上面是一个没有任何方法的类。这种类型的班级是否有特殊名称?
Answers:
大多数时候:反模式。
为什么?因为它有助于使用“ Operator”类和数据结构进行过程编程。您将数据和行为分开,这并不是完全好的OOP。
通常:DTO(数据传输对象)
只读数据结构,用于交换数据,该数据结构是从业务/域对象派生的。
有时:只是数据结构。
有时候,您只需要拥有那些结构即可保存简单明了且没有任何操作的数据。但是,那时我不会使用公共字段,而是使用访问器(获取器和设置器)。
我会称其为它,struct
或者record
因为它用于数据存储,而这对于像C
您在此处看到的语言来说是很常见的:struct(C编程语言)。因此,就我个人而言,我更喜欢使用a struct
而不是更合适且更易读的类:
struct A
{
public string something;
public int a;
}
通常将它们用作DTO(数据传输对象),就像其他人所说的那样。
我将此类称为可变数据持有人,有时会使用通用形式:
class DataHolder<T>
{
public T dat;
}
请注意,将dat
属性包装在属性中会降低性能,并且不会带来任何好处,因为属性访问器无法执行任何操作(读取/写入字段除外),这不会破坏某些实现。此外,可能有必要使用Interlocked
带有的方法dat
(或者,如果是结构,则带有其字段),但是如果将其dat
包装在属性中则不可能。
请注意,虽然可变数据持有人可能对需要保存数据的类型(是否可变)有用,但不能像不变类型一样安全地用于数据交换。例如,如下语句:
myData = myCollection.GetData(myKey);
如果GetData
返回不包含对可变数据的引用的不可变类类型或结构(是否为“可变”),则将具有明确的含义。但是,如果它返回一个可变的类对象,则不清楚该对象的任何更改是否将被基础集合始终忽略,始终导致对其进行干净的更新,还是导致某些令人讨厌或不可预测的行为,而这两种描述都不符合。
如果希望有一个集合在一个可变对象中返回数据,则正确的范例通常是:
var myData = new WhateverType();
myCollection.GetData(myKey, myData);
myData.ModifySomehow();
myCollection.StoreData(myKey, myData);
使用这种方法,有一个明显的含义,即GetData
会导致myData
使用集合中的数据填充数据,但是myCollection
一旦功能完成,就不会保留对其的引用,也不会将其用于任何其他目的。 StoreData
同样会myData
在不保留引用的情况下将信息复制到其自身的内部数据结构中。请注意,此方法的一个优点是,如果客户端代码将在循环中读取许多数据项,则它可以安全地myData
在循环外部创建一个实例,然后每次重复使用同一实例。同样,myCollection
可能能够重用与键关联的对象实例(从传入的实例复制数据),而无需创建新实例。