什么是使一个类属性“一次写入,多次读取”的最佳方法是让你只能设置属性一次?如何在VB.NET中创建一个属性“Write Once Read Many”?
我知道我可以通过在构造函数中的所有属性,使他们只读,但在案件有很多的属性,我不想有20多个参数的构造函数。
而且,我知道我可以“推出自己的”制定者,但不得不这样做,对于每一个属性,似乎像一堆冗余编码。
有没有干净的方式在2008年.NET 3.5 VB做到这一点?
什么是使一个类属性“一次写入,多次读取”的最佳方法是让你只能设置属性一次?如何在VB.NET中创建一个属性“Write Once Read Many”?
我知道我可以通过在构造函数中的所有属性,使他们只读,但在案件有很多的属性,我不想有20多个参数的构造函数。
而且,我知道我可以“推出自己的”制定者,但不得不这样做,对于每一个属性,似乎像一堆冗余编码。
有没有干净的方式在2008年.NET 3.5 VB做到这一点?
追记属性永远不会是“干净”。
我建议创建一个生成器/工厂类,以避免20 PARAM构造函数。 (是的,我知道这是相当长的一段打字)
类似的讨论在这里: Should I use set once variables?
[编辑]此外,即使你坚持,我没有看到另一种选择不是滚动您自己制定者,这是打字也很多。
谢谢。你链接的帖子解释了很多,我同意你的“最小惊喜”原则。使用建造者可能是最好的解决方案。 – 2010-01-12 16:01:43
使用暴露setter的一次写入属性并不干净,但这种属性与使用“CompareExchange”的TrySet方法相结合可以具有有用的线程安全特性。例如,在链表清单队列实现中,给定项目的“下一个”指针将是“null”(用于最后一个项目)或指向另一个项目。想要追加到队列的代码可能会尝试写入最后一项的“下一个”指针;如果失败,它必须遵循'next'指针,直到找到新的最后一个项目,然后重试。 – supercat 2012-11-20 18:26:49
@supercat:表示同意,但是setter应该是一个单独的方法(如TrySet),而不是proeprty setter。所以我认为“这不是真正的一次写入性质”。 – peterchen 2012-11-21 13:08:13
“最干净”的办法是不要做它在所有并使用自动属性。我也没有看到它的需要。他们只能写一次真的很重要吗?如果是这样,我肯定会去一个构造函数,它将所有属性的值作为参数。
我将使用此属性的一个示例是“ID”属性,它是该类的唯一标识符。这不是生死关头,但它可以确保“身份证”不会被其他代码所改变。 我不是那么熟悉汽车性能,除了知道他们不支持我正在使用的VB版本。是否有可能让他们写一次阅读许多? – 2010-01-12 15:36:39
我知道它已经快3年了,但这里是我的解决方案,我认为这是更好的:
public class Site
{
private int miID;
public Site(int iNewID, string sName)
{
miID = iNewID;
Name = sName;
}
// The ID property can only be set once in the constructor
public int ID
{
get { return miID; }
}
public string Name { get; set; }
}
欢迎来到StackOverflow!你应该尝试解释你为什么认为你的解决方案更好。 – nalply 2012-10-04 17:52:45
相关:http://stackoverflow.com/questions/1079292/should-i-use-set-一次变量/ 1079316 – peterchen 2010-01-12 15:50:09