• 部分类、静态类、Object类、ToString()方法、扩展方法的使用


    部分类、静态类、Object类、ToString()方法、扩展方法的使用

    一:部分类:

    前言:partial关键字允许将类、结构、方法或者接口放在多个文件中。一般情况下,一个类全部驻留在单个文件中。但有时,多个开发人员需要访问同一类的时候,或者某种类型的代码生成器生成了一个类的某部分。所以把类放在多个文件中是有益的。

    如果声明类时使用了下面的关键字。这些关键字就必须应用于同一个类中的所有的部分:

    public  private  protected  internal  abstract  sealed  new  一般约束

    在嵌套的类型中。只要partial关键字位于class关键字的前面,就可以嵌套部分类。在吧部分类编译到类型中时,属性、XML注释、接口、泛型类型的参数属性和成员会合并。

     

    二:静态类:

    如果类只包含静态的方法和属性的话,该类就是静态的。静态类在功能上与使用私有静态构造函数创建的类相同。不能创建类的实例,使用static关键字,编译器可以检查用户是否不经意间给类添加了实例成员。如果是,就会生成一个编译的错误。这样可以确保静态类的实例。静态类的调用的方式为:静态类.方法名。

    三:Object类:

    前面提到,所有的.Net类都派生于System.Object。实际上,如果在定义类的时没有指定基类编译器会自动的假定这个类派生自Object。结构总是派生于System.ValueType,System.ValueType有派生自System.Object。

    3.1:ToString()方法:是获取对象的字符串表示的一种便捷的方式。当只需要快速获取对象的内容,以 进行调试的时候,就可以用这个方法。在数据的格式化方面,它几乎没有任何的选择。如果需要更复杂的字符串表示。就应该实现IFormattable接口。

    3.2:GetHashCode()方法:如果对象放在名为映射(也称为散列表或者字典)的数据结构中,就可以使用这个方法。处理这些结构的类使用该方法确定把对象放在结构的什么地方。如果希望把类当作字典的一个键,就需要重写GetHashCode()方法,实现给方法重载的方式有一些相当严格的限制(介绍字典的详细的讨论)。

    3.3:Equals()和ReferenceEquals()方法:注意有三个用于比较对象相等性的不同方法,这三个方法和比较运算符“=”在使用方式上有一些微妙的区别。而且在重写带一个参数的虚Equals()方法有一些限制(在运算符是详细介绍)。

    3.4:Finalize()方法:在异步编程的时候详细讨论。

    3.5:GetType()方法:这个方法返回从System.Type派生的类的一个实例。这个对象可以提供对象成员所属类的更多的信息。包括基本类型、方法、属性等。System.Type还提供了反射结束的入口点。

     

    四:ToString方法:

    它是快速的获取对象的字符串表示的最便捷的方式。我们首先来看两个例子:

     

     

        enum Colors { Red, Orange, Yellow }
    
        class Program
        {
            static void Main(string[] args)
            {
    
                int i = 10;
                string str = i.ToString();//return 10;
    
                Colors favoriteColor = Colors.Orange;
                string result = favoriteColor.ToString();//return Orange
    
            }
        }

     如果不在自己的类中重写ToString(),该类将只继承System.Object的实现方式——它显示类的名称,如果希望ToString()返回一个字符串,其中包含类中对象的值信息,就需要重写它。

        public class Money
        {
    
            private decimal _amount;
            public decimal Amount
            {
                get { return _amount; }
                set { _amount = value; }
            }
    
            public override string ToString()
            {
                return "$" + Amount.ToString();
            }
    
        }

    客户端程序的调用:

            static void Main(string[] args)
            {
    
                Money money = new Money();
                money.Amount = 40;
                Console.WriteLine(money.ToString());
                Console.ReadKey();
    
            }

    在许多的情况下,也可以使用String.Format()方法,而不是ToString()。

    五:扩展方法:

    扩展方法是静态方法,它是类的一部分,但是实际上没有放在类的源代码中,假定上例中的Money类需要一个方法AddAmount(decimal amountToAdd)。但是,由于某种原因,程序集中的源代码不能直接的修改。此时需要创建一个静态类,把方法AddToAmount()添加为一个静态的方法。对应的代码为:

     

    namespace _4.ToString__方法
    {
        /// <summary>
        /// C#扩展方法
        /// </summary>
        public static class MoneyExtension
        {
            public static decimal AddToAmount(this Money money, decimal amountToAdd)
            {
                return money.Amount += amountToAdd;
            }
        }
    }

     


    对于扩展方法,第一个参数是就是要扩展的类型,它放在this关键字的后面。这告诉编译器,这个方法是Money的一部分。在这个例子当中,Money是要扩展的类型。在扩展方法中,可以访问所扩展类型的所有共有方法和属性。

                //扩展方法的调用
                decimal result = money.AddToAmount(10);

    即使扩展方法是静态的,也要使用标准的实例方法语法。注意这里使用money实例变量来调用AddToAmount(20);,而没有使用类型名。如果扩展方法与类中的某个方法同名,就从来不会调用扩展方法,类中已有的任何实例方法优先。 

      

  • 相关阅读:
    【Html】Clipboard.js 实现点击复制,剪切板操作
    【转】【Python】python使用urlopen/urlretrieve下载文件时出现403 forbidden的解决方法
    【Html】div 加载 html页面的方法
    【WPF】创建文本字符串的路径PathGeometry
    【WPF】自定义鼠标样式
    Linux 错误记录
    微信开放平台代公众号管理
    微信开放平台获取授权公众号的流程
    vue-router "path" is required in a route configuration
    最大连接数“65535”的误解
  • 原文地址:https://www.cnblogs.com/MoRanQianXiao/p/7803338.html
Copyright © 2020-2023  润新知