部分类、静态类、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);,而没有使用类型名。如果扩展方法与类中的某个方法同名,就从来不会调用扩展方法,类中已有的任何实例方法优先。

时间: 2024-10-13 10:49:18

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

基于内置类的原型扩展方法

<!DOCTYPE html><html><head> <meta charset="UTF-8"> <title>基于内置类的原型扩展方法</title></head><body><script type="text/javascript"> var ary = [12, 23, 34, 12, 23, 34, 12, 23, 34, 12, 23, 34,

object 类 toString() 和 equals() 的覆写

基本作用: objiect类是所有类的父类. 任何一个类定义的时候如果没有明确定义了父类的话,默认父类是Object类. class A extends Object{} 在整个java里面,类的继承关系一直存在的.例如: String 类 这时候一个好处就出现了,利用Object类可以接受一切类. Object obj = new Book() ://向上转型 Obect obj = “Hello”  : //向上转型 如果不知道参数类型的时候,使用Object是最好的选择 http://do

问题1、java.lang中String类和Object类中的equals方法比较

String类中的equals方法重写了Object类中的equals方法,下面通过代码来比较二者的不同之处: 一.String类 1. String s1 = "String"; String s2 = "String"; System.out.println(s1 == s2 ); System.out.println(s1.equals(s2));

Object 类中的 equals方法

1 相等与同一 如果两个对象具有相同的类型以及相同的属性值,则称这两个对象相等.如果两个引用对象指的是同一个对像,则称这两个变量同一.Object类中定义的equals 函数原型为:public boolean equals(Object);他是判断两个对象是否同一,并不是是否相等. 2 equals方法 由于Object 类是所有类的最高基类,所有其他类都继承类Object类的equals()方法,定义原型如下: public boolean equals (Object x){ return

JAVA中Object类中的equals方法补充

Object类中的equals方法: 无论new多少个对象,当使用 "= =" 来判断的时候,是判断内存地址.判断回事false 若是需要进行对象之间的判断,则需要重写equals方法: public boolean equals(Object obj)//obj是传入的形式参数(对象) { if (obj == null)//判断对象是否为空 { return false;//空则返回false } else { if ( obj instanceof cat)//判断这个传入参数(

JS的Object类的属性、方法及如何创建对象

属性 constructor:对创建对象的函数的引用(指针).对于Object类,该指针指向原始的object()函数. prototype:对该对象的对象原型的引用.对于所有的类,它默认返回Object对象的一个实例. 方法 hasOwnProperty(property):判断对象是否有某个特定的属性.必须用字符串指定该属性(例如,o.hasOwnProperty(”name”)). isPrototypeOf(object):判断该对象是否为另一个对象的原型. propertyIsEnum

java.long.object类中的重要方法

一:概念 java.long.object Object类是所有Java类的祖先.每个类都使用 Object 作为超类. 二:方法概览 clone() 创建并返回此对象的一个副本. equals(Object obj) 指示某个其他对象是否与此对象“相等”. finalize() 当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法.(JVM中自带的垃圾回收机制只能回收new出的对象) getClass() 返回一个对象的运行时类. hashCode() 返回该对象的哈希码值

Java常见对象Object类中的个别方法

Java常见对象Object类 public int hashCode() : 返回该对象的哈希码值. 注意:哈希值是根据哈希算法计算出来的一个值,这个值和地址值有关,但是不是实际地址值.你可以理解成地址值. package common_object; public class Demo extends Object{ } package common_object; public class DemoTest { public static void main(String[] args)

object类中常用的方法

Object类方法 Object是所有类的父类,任何类都默认继承Object.Object类到底实现了哪些方法? (1)clone方法 保护方法,实现对象的浅复制,只有实现了Cloneable接口才可以调用该方法,否则抛出CloneNotSupportedException异常. (2)getClass方法 final方法,获得运行时类型. (3)toString方法 该方法用得比较多,一般子类都有覆盖. (4)finalize方法 该方法用于释放资源.因为无法确定该方法什么时候被调用,很少使用

Object类中常见的方法总结

Object类是一个特殊的类,是所有类的父类.它主要提供一下11个方法: 1 public final native Class<?> getClass() //natice方法,用于返回当前运行时对象的class对象,使用了final关键字修饰,不允许子类重写 2 3 public native int hashCode() //natice方法,用于返回对象的哈希码,主要使用在哈希表中,比如JDK中的Hash Map 4 5 public boolean equals(Object obj