zoukankan      html  css  js  c++  java
  • C#中的global::system***命名空间别名限定符

    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)); }
    这是我在其他人的博客中摘要下来的文章,但是还是对其用法不是很明确,如果哪位大侠理解它的原理,请不吝赐教!

  • 相关阅读:
    各大互联网公司架构演进之路汇总
    Java工程师成神之路~(2018修订版)
    Java的并发编程中的多线程问题到底是怎么回事儿?
    深入理解多线程(五)—— Java虚拟机的锁优化技术
    Java中线程池,你真的会用吗?
    深入理解多线程(四)—— Moniter的实现原理
    深入理解多线程(三)—— Java的对象头
    深入理解多线程(二)—— Java的对象模型
    深入理解多线程(一)——Synchronized的实现原理
    css
  • 原文地址:https://www.cnblogs.com/distance/p/2022202.html
Copyright © 2011-2022 走看看