- 浏览: 3053394 次
- 性别:
- 来自: 海外
文章分类
- 全部博客 (430)
- Programming Languages (23)
- Compiler (20)
- Virtual Machine (57)
- Garbage Collection (4)
- HotSpot VM (26)
- Mono (2)
- SSCLI Rotor (1)
- Harmony (0)
- DLR (19)
- Ruby (28)
- C# (38)
- F# (3)
- Haskell (0)
- Scheme (1)
- Regular Expression (5)
- Python (4)
- ECMAScript (2)
- JavaScript (18)
- ActionScript (7)
- Squirrel (2)
- C (6)
- C++ (10)
- D (2)
- .NET (13)
- Java (86)
- Scala (1)
- Groovy (3)
- Optimization (6)
- Data Structure and Algorithm (3)
- Books (4)
- WPF (1)
- Game Engines (7)
- 吉里吉里 (12)
- UML (1)
- Reverse Engineering (11)
- NSIS (4)
- Utilities (3)
- Design Patterns (1)
- Visual Studio (9)
- Windows 7 (3)
- x86 Assembler (1)
- Android (2)
- School Assignment / Test (6)
- Anti-virus (1)
- REST (1)
- Profiling (1)
- misc (39)
- NetOA (12)
- rant (6)
- anime (5)
- Links (12)
- CLR (7)
- GC (1)
- OpenJDK (2)
- JVM (4)
- KVM (0)
- Rhino (1)
- LINQ (2)
- JScript (0)
- Nashorn (0)
- Dalvik (1)
- DTrace (0)
- LLVM (0)
- MSIL (0)
最新评论
-
mldxs:
虽然很多还是看不懂,写的很好!
虚拟机随谈(一):解释器,树遍历解释器,基于栈与基于寄存器,大杂烩 -
HanyuKing:
Java的多维数组 -
funnyone:
Java 8的default method与method resolution -
ljs_nogard:
Xamarin workbook - .Net Core 中不 ...
LINQ的恶搞…… -
txm119161336:
allocatestlye1 顺序为 // Fields o ...
最近做的两次Java/JVM分享的概要
刚才读到Alan McGovern的一帖,问为什么形式参数是ref A的地方不能把ref B作为实际参数传进去:
后面的回复很精辟的解答了这问题:如果把上面的Foo()实现成这样:
而同时允许传入ref b为参数的话,那就等于允许:
这显然就不行了——在类型安全的前提下,派生类引用无法指向基类的实例。
虽然是个小地方,乍一下没看出来的话还是会觉得很困惑,是吧?
C#语言规范的10.5.1.2小节讲解了reference parameter,不过并没有提到variance的问题……hmm,或许该提个建议让他们加点解释?
==========================================================
更新:
呜呜,发email给Eric Lippert跟他讨论这事,被精辟的回复拍回来了。
我眼残了,规范里的这句:
我很自然的无视了“same”而把它看成了“compatible”……这个same就说明了类型的invariant性质,不允许多态。
更新2:
Eric在Why do ref and out parameters not allow type variation?再次讲解了这个问题
class A { } class B : A { } // ... public void Foo( ref A a ) { // ... } public void Bar( ) { B b = new B( ); Foo( ref b ); // error }
后面的回复很精辟的解答了这问题:如果把上面的Foo()实现成这样:
public void Foo( ref A a ) { a = new A( ); }
而同时允许传入ref b为参数的话,那就等于允许:
B b = new A();
这显然就不行了——在类型安全的前提下,派生类引用无法指向基类的实例。
虽然是个小地方,乍一下没看出来的话还是会觉得很困惑,是吧?
C#语言规范的10.5.1.2小节讲解了reference parameter,不过并没有提到variance的问题……hmm,或许该提个建议让他们加点解释?
==========================================================
更新:
我 写道
C#语言规范的10.5.1.2小节讲解了reference parameter,不过并没有提到variance的问题……hmm,或许该提个建议让他们加点解释?
呜呜,发email给Eric Lippert跟他讨论这事,被精辟的回复拍回来了。
我眼残了,规范里的这句:
C# Language Specification 10.6.1.2 写道
When a formal parameter is a reference parameter, the corresponding argument in a method invocation must consist of the keyword ref followed by a variable-reference of the same type as the formal parameter.
我很自然的无视了“same”而把它看成了“compatible”……这个same就说明了类型的invariant性质,不允许多态。
更新2:
Eric在Why do ref and out parameters not allow type variation?再次讲解了这个问题
发表评论
-
字符串的一般封装方式的内存布局 (1): 元数据与字符串内容,整体还是分离?
2013-11-07 17:44 22410(Disclaimer:未经许可请 ... -
字符串的一般封装方式的内存布局
2013-11-01 12:55 0(Disclaimer:未经许可请 ... -
关于string,内存布局,C++ std::string,CoW
2013-10-30 20:45 0(Disclaimer:未经许可请 ... -
对象的重量
2011-08-21 17:15 0http://domino.research.ibm.com/ ... -
GetCustomAttribute()每次都返回新Attribute实例
2009-11-10 10:30 0Jeffrey Zhao: 一次失败的尝试(上):原来GetC ... -
委托与方法和隐藏参数
2009-09-07 15:32 3312之前正好发了些帖子是关于CLR里的委托的,然后看到老赵说事件也 ... -
要让CLR挂掉的话(第二弹)……
2009-09-04 03:26 12880(Disclaimer:如果需要转 ... -
要让CLR挂掉的话……
2009-09-02 16:53 4786(Disclaimer:如果需要转载请先与我联系。 作者:Re ... -
趣味编程:函数式链表的快速排序
2009-08-31 08:53 3451(恢复自2009-08-28的备份 ... -
事件处理器导致内存泄漏
2009-08-25 15:03 0Memory leak via event handlers ... -
C# 3.0的类型推导
2009-08-23 12:24 0Howard Dierking: Lambda, Lambda ... -
把lock的意思给弄混了 T T
2009-08-20 17:49 2605悲剧啊……前几天有个同学不停问我Java里的同步问题,今天写C ... -
把IEnumerable<T>和IObservable<T>粘起来?
2009-07-23 03:02 0Channel 9: Expert to Expert: Br ... -
Scott Peterson: Variance, Thy Name is Ambiguity
2009-07-01 23:49 1639原文作者:Scott Peterson 原文地址:http:/ ... -
void无法协变
2009-06-30 11:17 0Eric Lippert The void is invari ... -
同一个表达式算出来的浮点数结果会不相等?
2009-05-30 03:27 0浮点数有很多可把玩的地方。例如下面这段C程序: #includ ... -
C#开始默认引用Microsoft.CSharp.dll
2009-05-20 16:14 0记得VB6的运行时么?留意到VB.NET的程序都需要额外的VB ... -
反射与显式实现接口的方法
2009-05-20 11:43 4063在前一帖里,我用到了下面三处Expression.Call() ... -
C#的+=运算符两例
2009-05-06 18:18 2041刚偶尔看到了justjavac写的java解惑 - 半斤八两( ... -
Nullable的诡异之处……
2009-04-02 20:52 1836原来Nullable type是null的时候,以它作为被调用 ...
相关推荐
4. 关于 ref 和 out 的描述,使用 ref 参数,传递到 ref 参数的参数必须最先初始化,使用 out 参数,传递到 out 参数的参数不需要最先初始化。 5. 在对 SQL Server 数据库操作时,应选用 SQL Server .NET Framework...
与 `out` 参数不同,`ref` 参数的参数在传递前不需要显式初始化。 2. **什么是CLR、CTS和CLS?** - **CLR(Common Language Runtime)**:全称为公共语言运行时,它位于操作系统之上,包含JIT(即时编译器)。CLR...
从给定的文件内容来看,这是一份与.NET框架相关的编程笔试题目,涵盖了从基础知识到高级概念的多个方面。下面将对这些知识点进行详细的解析: ### 1\. 基础概念 首先出现的是几个空白填空题,尽管具体题目没有给出...
`DataSet`类似于一个小型的离线数据库,可以在不与数据库服务器通信的情况下对其进行操作。 - **Command(命令)**:`SqlCommand`对象用于执行SQL命令。它可以是查询、更新或删除命令。 - **DataReader(数据读取器...
- `Overload`(重载)在同一类中,允许存在多个同名方法,但它们的参数列表必须不同,可以是参数个数、类型或者参数顺序的不同。 2. **ASP.NET生命周期**: - ASP.NET页面生命周期包括一系列事件,如初始化、加载...
2. **`GetEnumerator` 方法:** 如果一个类想要支持 foreach 遍历,那么它需要实现 `IEnumerable` 接口或至少公开一个 `GetEnumerator` 方法,该方法返回一个实现了 `IEnumerator` 接口的对象,用来控制集合元素的...
一个类可以实现多个接口,这是多态的一种体现。 - **选项C**: 正确。接口不能被实例化,只能被类实现或由其他接口继承。 - **选项D**: 接口中不能包含已经实现的方法,因为接口只定义了方法签名。 **2.2 数据库读取...
- `ref.hyperwave.html`:可能是一个关于PHP中特定函数或类的参考指南,如超文本预处理器(Hyperwave)相关功能。 2. **PHP基础**: - PHP是服务器端的脚本语言,嵌入HTML代码中执行,用于动态生成网页内容。 - ...
4. ref和out参数:A、C、D(ref参数需要先初始化,out参数在方法内初始化,ref和out都需要显式传递) 知识点补充: 1. 接口:接口定义一组方法签名,但不提供实现,类可以实现多个接口。 2. 数据提供程序:对SQL ...
- `c.i`的值会通过`Add(c.i)`改变,因为`Add`方法接收`int`类型的参数,而不是`ref`参数,所以`c`的实例不会受到影响。 - `StringConvert`方法也是静态的,它改变了方法内的局部变量,而不是`Main`方法中的`str`。...
- **重载**: 同一个类中可以有多个同名的方法或操作符,只要它们的参数列表不同即可。这有助于提高代码的可读性和可维护性。 #### 6. .NET 错误处理机制 .NET 的错误处理机制基于try-catch-finally结构。当程序...
- 多态: 同一个接口可以有不同的实现。 #### 十四、C#集合类型 **知识点14:C#中可使用foreach遍历的集合** - **描述**: C#中哪些类型的集合可以使用`foreach`进行遍历。 - **解析**: `IEnumerable`接口或实现了`...
- **重载**: 在同一个类中,同名但参数不同的多个方法。 #### 11. sealed修饰的类的特点 - **密封类**: 不能被继承。 #### 12. .NET中接口与抽象类的相关规定 - **接口**: 可以继承其他接口。 - **抽象类**: - ...
- **泛函构造**:functors接受一个或多个参数模块,并返回一个新的模块。 **2.4 函数式和类型抽象** - **参数化模块**:通过functors实现模块参数化,允许创建不同类型的具体实例。 **2.5 模块和独立编译** - **...
- 多态:指的是同一种操作作用于不同的对象,可以有不同的解释,产生不同的执行效果。 2. **遍历对象**: - 在.NET中,若要使用`foreach`循环遍历对象,该对象需实现`IEnumerable`接口,或者类型声明了`...
1. **单例模式**:确保一个类只有一个实例,并提供一个全局访问点。例如`Runtime.getRuntime()`。 2. **工厂模式**:提供创建对象的接口,让子类决定实例化哪个类。如`java.util.Calendar.getInstance()`。 3. *...
- ref:要求参数在调用时已初始化,可双向传递值。 - out:无需初始化,调用方法负责赋值,确保传出参数有值。 5. **Application、Cookie 和 Session 的比较** - Application:全局共享,适用于所有用户,数据...
根据给定的文件信息,我们可以总结出一系列与C#编程语言和SQL相关的知识点,这些知识点不仅涵盖了基础概念,还深入到了具体的代码示例和数据库操作技巧。下面将逐一解析: ### 面向对象特性 - **继承性**:允许...
引用提供了一种安全的指针替代方案,如`int &ref = num;`。 11. 结构体与联合:结构体用于组合不同类型的数据,联合则在不同时刻共享同一块内存。例如,`struct Student { int id; std::string name; };` 12. 静态...