C# ReferenceType值和ValueType值的Snappy名称
我有两门课。一个处理ReferenceType值,另一个处理ValueType值。这是唯一的区别,但很重要。我正在努力为每个班级找到一个像样的名字:C# ReferenceType值和ValueType值的Snappy名称,c#,naming,C#,Naming,我有两门课。一个处理ReferenceType值,另一个处理ValueType值。这是唯一的区别,但很重要。我正在努力为每个班级找到一个像样的名字: ReferenceTypeValueHandler和ValueTypeValueHandler 不,ValueTypeValue听起来很混乱 ClassValueHandler和StructValueHandler 我不应该在类的名称中使用“Class”,是吗 NullableValueHandler和NonNullableValueHa
- ReferenceTypeValueHandler和ValueTypeValueHandler
- ClassValueHandler和StructValueHandler
- NullableValueHandler和NonNullableValueHandler
- HeapValueHandler和StackValueHandler
ValueKeeper
。它有两种方法TakeValue(TValue-value)
和TValue-ClaimValue()
。TakeValue方法获取该值并检查之前是否已经提供了一个值,如果已经提供了,则抛出包含适当详细信息的异常。一旦完成对包装器XML的读取,并且必须在刮取的值上创建包装器实体,就会调用ClaimValue方法。如果有,此方法将检查是否有通过TakeValue方法接收的值
它只返回该值,如果否,则抛出异常。现在的问题是,对于引用类型的值,我使用与NULL的比较来查看是否提供了该值。为了使这种比较成为可能,必须对TValue类型参数有一个通用约束:
其中TValue:class
。有了这个约束,我不能将这个类用于值类型值。因此,我需要另一个类,它做同样的操作,但对值进行操作,其中TValue:struct
使用Nullable
字段来保留已提供或尚未提供的值。现在,对于两个类,我不能只使用ValueKeeper,我需要一个名称作为引用类型,另一个名称作为值类型。这就是问题所在。我需要一种方式来表达这种微妙的差异。但同样,类的作用并不重要,重要的是找到适当的方法来澄清这种差异。我不同意类名的其余部分不重要。您希望让您的代码自己说话,并使读者更容易理解您在设计类/结构时想到的概念。你建议的类名不会让我知道这个类实际上在做什么。我建议搜索更具体的名称:如何处理该值?什么价值
除了一个是类,另一个是结构之外,结构值和类值之间有什么区别?必须有更多的区别,否则就没有意义将同一事物作为结构和类(DRY)
如果您执行的是非常抽象的操作,请尝试搜索模式或概念的通用名称。保留该值并确保提供该值听起来有点像缓存机制
其次,您在这里面临一个语义问题:什么是包含值类型的“值”和引用类型的“值”的术语。我们可以在这里简单地询问.NET framework的继承链,并将其称为对象
因此,在本例中,类似于CacheForValueTypeObjects
和CacheForReferenceTypeObjects
的东西可以工作。我不知道cache是否很好地表达了这个目的,但如果不是,我会尝试搜索一个最能描述类的“最终”目的的术语,以及它出现的原因
我打赌你不会认为‘我现在真正需要的是一个ValueTypeValueHandler!’。还有更多的东西我喜欢这样的问题,谢谢 进一步描述类的目的可能会有所帮助。类的目的是保留该值并确保提供了该值。其实这并不重要,类的其他名称可以是任何名称,重要的是反映类所使用的值的类型。您好,@bonomo,您是否考虑过使用Equals(valueObject,default(TValue))而不是valueObject==null?没有必要对引用类型和值类型进行区分……好吧,你说使用Equals,什么的Equals?第二个默认值(Int32)是0,这是一个合法的数字值,因此它会告诉我,虽然有一个值,但没有值,但恰好是0。我的意思是,我当然可以想出一个单一的类解决方案,它可以只是一个在提供值时设置的标志,所有的扣减都可以通过检查该标志而不是值来进行,但它并没有消除类似问题的问题,我只是更新了问题。CaseFoalValuePyObjes听起来不错,我可以考虑一下,谢谢。