Short Version
那些没有时间阅读我对这个问题的推理的人:
www.un.org/Depts/DGACM/index_spanish.htm 是否有办法执行“仅限新物体”或“仅限现有物体”的方法的政策?
Long Version
有许多方法将物体作为参数,而这种方法是否具有“全部”目标,则无关紧要。 例如:
var people = new List<Person>();
Person bob = new Person("Bob");
people.Add(bob);
people.Add(new Person("Larry"));
此处为<代码>List<Person> 添加编码>的方法采用了“现有”<代码>Person(Bob)和“新”<代码>Person(Larry),该清单载有这两个项目。 可在bob
或people[0]
上查阅。 可在此后作为<条码>人=1条码>查询,如有必要,可上网查阅<条码>。
OK, 罚款。 但是,有时一种真正意义上的方法(shouldn t)会被采纳为新目标。 例如,请<代码>Array。 Sort<T>。 下面的字面意思是:
Array.Sort<int>(new int[] {5, 6, 3, 7, 2, 1});
上述所有法典都采用新的阵列,然后忘记(因为其参考数字在<条码>后达到零;int>的退出,因此,如果I m不错,则将收集垃圾。 http://code>Array.Sort<T>>expects a “存在于”下阵列作为其论点。
可以想象的是,还有其他一些方法可以expect“new” Object(但我一般认为,期望这种期望会是一种设计错误)。 一个不完美的例子就是:
DataTable firstTable = myDataSet.Tables["FirstTable"];
DataTable secondTable = myDataSet.Tables["SecondTable"];
firstTable.Rows.Add(secondTable.Rows[0]);
正如我说过的那样,自
firstTable.ImportRow(secondTable.Rows[0]);
不管怎么说,这还是我的问题的很多确定,即: 是执行“仅限新物体”或“仅限现有物体”方法政策的任何方法,无论是在其定义中,还是在其方法本身中(或许是由某些习俗认定我不知道的),还是在方法上(也许通过思考,即使有的话,我可能回避这一政策)?
如果不是的话,对于如何做到这一点,任何有意义的想法都会受到欢迎。 例如,如果能以某种方式获得某个特定物体的GC参考,那么你就可以在一种方法开始时告诉大家,你是否收到新物体(假设你重新处理参考类型,当然这是这个问题唯一相关的假设)。
www.un.org/Depts/DGACM/index_spanish.htm
较长的版本更长。
一切权利,即我有某种方法,希望能选择性地接受“<>TextWriter,以取得进步或做什么:
static void TryDoSomething(TextWriter output) {
// do something...
if (output != null)
output.WriteLine("Did something...");
// do something else...
if (output != null)
output.WriteLine("Did something else...");
// etc. etc.
if (output != null)
// do I call output.Close() or not?
}
static void TryDoSomething() {
TryDoSomething(null);
}
现在,请允许我考虑两种不同的方法:
string path = GetFilePath();
using (StreamWriter writer = new StreamWriter(path)) {
TryDoSomething(writer);
// do more things with writer
}
OR:
TryDoSomething(new StreamWriter(path));
Hmm. ......这似乎会造成问题,难道没有问题? I ve Construction a StreamWriter
, which implementings IDisposable
, but TryDoSomething
不知道它是否完全可以查阅其<代码>output论点。 因此,该物体要么过早处置(在第一个案例中),要么完全处置(在第二种情况下)。
我不想说,这必然是一个巨大的设计。 也许Stodola是正确的,从一开始,这只是一个坏的想法。 不管怎么说,我问这个问题,主要是因为我很奇怪,如果这样一件事情是