黄超, 2010/9/4 17:10:05, § 0
先看看代码:
class B<U>
{
public U F(long index) {...}
}
class D<T>: B<T[]>
{
public T G(string s) {...}
}
在上面的示例中,构造类型 D<int> 具有一个非继承的成员 public int G(string s),该成员是通过将类型形参 T 替换为类型实参 int 来获得的。D<int> 还有一个从类声明 B 继承的成员。先用 int 替换基类说明 B<T[]> 中的 T 来确定 D<int> 的基类类型 B<int[]>,以此来确定该继承成员。然后,作为 B 的类型实参,用 int[] 替换 public U F(long index) 中的 U,从而得到继承成员 public int[] F(long index)。
黄超, 2010/9/2 16:35:54, § 0
每个编译单元和命名空间体对于 extern 别名和 using 别名都有单独的声明空间。因此,虽然 extern 别名或 using 别名的名称在直接包含它们的编译单元或命名空间体中声明的 extern 别名和 using 别名集中必须唯一,但是允许别名与类型或命名空间同名,只要它仅与 :: 限定符连用。
阅读全文»
黄超, 2010/8/29 22:15:09, § 1
C#3.0增加了“扩展方法”这种东西,允许我们在类的外部为该类添加方法。比如说,我们可以为一些不开源的第三方控件增加自己需要的功能。听上去很奇妙,但用起来其实很简单。
阅读全文»
黄超, 2010/8/28 22:13:16, § 0
最近重新学习C#时,觉得C#泛型机制中有些细节需要特别注意,故记如下文。
阅读全文»