瑞雪年

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: :: 订阅 订阅 :: 管理 ::
在C# 2.0的语言规范中, 有一段对"语法多义性"的说明。看后写了个例子编译了一下,代码如下:

    
public partial class Form1 : Form
    {
        
public class A
        {
        }

        
public class B
        {
        }

        
public void F(bool b1, bool b2)
        {
        }

        
public void F(bool b1)
        {
        }

        
public bool G<TA, TB>(int i)
        {
            
return true;
        }

        
public Form1()
        {
            InitializeComponent();
        }

        
private void Test1()
        {
            F(G
<A, B>(7));
        }

        
private void Test2()
        {
            
int G = 3;
            
int A = 4;
            
int B = 5;

            F(G
<A, B>(7));
        }

        
private void Test3()
        {
            
int G = 3;
            
int A = 4;
            
int B = 5;

            F(G
<A, B>7);
        }

        
private void Test4()
        {
            
int H = 3;
            
int A = 4;
            
int B = 5;

            F(H
<A, B>(7));
        }

        
private void Test5()
        {
            
int H = 3;
            
int A = 4;
            
int B = 5;

            F((H
<A), B>(7));
        }

        
private void Test6()
        {
            
int H = 3;
            
int A = 4;
            
int B = 5;

            F(H
<(A), B>(7));
        }
    }
Test4()编译不过去,提示“变量“H”不是泛型方法。如果原打算使用表达式列表,请在 < 表达式两边使用括号。”。
即要求改正如Test5()的代码。Test6()也是可以正确编译的。
而Test4()在VS.NET2003,即.net 1.1下是可以编译通过的。
同时受泛型影响的“规范”还有,"右移语法变化", 在C#语言规范中也作了部分说明。

posted on 2007-08-17 14:23  瑞雪年  阅读(318)  评论(0编辑  收藏  举报