m-y*_*m-y 19 c# partial-methods
挺直的.MSDN声明您可以使用ref,但不能使用部分方法.我只是好奇为什么?我的理解是,当编译代码时,部分被合并,那么限制是什么呢?还有更多partial不仅仅是使代码文件更清洁和有组织(即eyecandy)?
ang*_*son 20
你必须考虑如果没有实现部分方法会发生什么.
然后会发生的是,对方法的所有调用都被剥离,好像它们从未发生过一样.
因此对于使用out的方法,它看起来像这样:
stream s;
GetStream(out s);
s.Write(...);
Run Code Online (Sandbox Code Playgroud)
并编译好像它说:
stream s;
s.Write(...);
Run Code Online (Sandbox Code Playgroud)
此代码不允许,因为s尚未初始化.保证变量将在您尝试调用该Write方法时初始化,并与调用相关联GetStream.
返回数据的方法也是如此.如果你没有实现部分方法,那么整个方法调用就不会被编译,你需要考虑你能做什么和不能做什么,并且仍然保留调用它的代码有效.就out返回值而言,它有可能使调用代码无效或不完整,因此不允许这样做.
至于ref,这是有效的,因为初始化已由调用代码处理:
stream s = null;
GetStream(ref s); // may be stripped out
if (s != null)
s.Write(...);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1297 次 |
| 最近记录: |