代码是我最大的快乐
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

C#中的global::system***命名空间别名限定符

Posted on 2011-04-20 13:42  distance  阅读(1959)  评论(2编辑  收藏  举报

using System;

class TestApp
{
    // Define a new class called 'System' to cause
problems.

    public class System { }

    // Define a constant called 'Console' to cause more
problems.

    const int Console = 7;
    const int number =
66;

    static void Main()
    {
        // Error Accesses TestApp.Console
        //Console.WriteLine(number);
    }
}

由于类 TestApp.System 隐藏了
System 命名空间,因此使用
System.Console 仍然会导致错误:

// Error Accesses
TestApp.System
System.Console.WriteLine(number);

但是,可以通过使用 global::System.Console
避免这一错误,如下所示:

global::System.Console.WriteLine(number);

显然,并不推荐创建自己的名为 System
的命名空间,您不可能遇到出现此情况的任何代码。但是,在较大的项目中,很有可能在一个窗体或其他窗体中出现命名空间重复。在这种情况下,全局命名空间限定符可保证您可以指定根命名空间。

global 是 C# 2.0
中新增的关键字,理论上说,如果代码写得好的话,根本不需要用到它。

假设你现在写了一个类,名字叫 System。那么当你再在代码里写 System
的时候,编译器就不知道你是要指你写的 System 类还是系统的 System 命名空间,而 System
命名空间已经是根命名空间了,无法再通过完全限名来指定。在以前的 C# 版本中,这就是一个无法解决的问题。现在,可以通过

global::System 来表示 System
根命名空间,

而用你自己的 MyNamespace.System 
来表示自己的类。

当然,这种情况不应该出现,你不应该写一个名为 System 的类。

 


源代码如下:(请帮忙解释一下)
[global::System.Data.Linq.Mapping.FunctionAttribute(Name="dbo.sp_Config_RoomCategory_Insert")] public int sp_Config_RoomCategory_Insert([global::System.Data.Linq.Mapping.ParameterAttribute(Name="RoomCategoryName", DbType="NVarChar(256)")] string roomCategoryName, [global::System.Data.Linq.Mapping.ParameterAttribute(Name="RoomCategoryRank", DbType="Int")] System.Nullable roomCategoryRank, [global::System.Data.Linq.Mapping.ParameterAttribute(Name="PropertyInt", DbType="Int")] System.Nullable propertyInt, [global::System.Data.Linq.Mapping.ParameterAttribute(Name="PropertyString", DbType="NVarChar(MAX)")] string propertyString, [global::System.Data.Linq.Mapping.ParameterAttribute(Name="PropertyData", DbType="VarBinary(MAX)")] System.Data.Linq.Binary propertyData) { IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), roomCategoryName, roomCategoryRank, propertyInt, propertyString, propertyData); return ((int)(result.ReturnValue)); }
这是我在其他人的博客中摘要下来的文章,但是还是对其用法不是很明确,如果哪位大侠理解它的原理,请不吝赐教!

态度决定事情的结果,态度决定人生的方向,态度决定别人对你的看法,态度能改变自己,也可以主观地去改变态度,改变的出发点就是你自己。--By Distance