C# OBJECT类的所用方法

一、Object类

所有的.net类都派生于System.Object。如果在定义类时没有指定基类,编译器就会自动假设这个类派生于Object。对于结构总是派生于System.ValueType,而System.ValueType派生于System.Object。

1、System.Object方法

ToString()方法,是获取对象的字符串表示的一种快捷方式。当只需要快速获取对象内容,以用以调试时,就可以使用这个方法。在数据格式化方面功能弱,如果考虑用户的格式化配置或区域,就应实现IFormattable接口。

GetHashTable()方法,如果对象放在名为映射(散列表或字典)的数据结构中,就可以使用该方法,可以确定把对象放在结构的什么地方。

Equals()方法 与==有微妙的区别,以后会讨论

Finalize()方法接近c++中的析构函数,在引用对象被回收,以清理资源时调用。如果对象拥有对未托管资源的引用。则在该对象被删除时,就需要删除这些引用,此时要重写Finalize()。

GetType()方法:这个方法返回从System.Type派生的类的一个实例。

MemberwiseClone()方法 用来复制对象,返回一个对副本的引用,不能复制外部的对象,不能重写它的代码。

2、ToString()方法

是快速获得对象字符串表示的最便捷方式。如:

int i=-50;
String str=i.ToString();   // retruns "-50"

例子:

enum Colors{Red,Orange,Yellow};
//later on in code ...
Colors favoriteColor=Colors.Orange;
String str=favoriteColor.ToString(); // returns "Orange"

如果不在自己的类中重写ToString(),该类继承System.Object的执行方式-显示类的名称。如果想让该方法,显示类中的值信息,就需要重写该函数,例如:

using System;

namespace Wrox.ProCSharp.OOCSharp
{
  class MainEntryPoint
  {
    static void Main(String[] args)
    {
      Money cash1=new Money();
      cash1.Amount=40M;
      Console.WriteLine("cash1.ToString() return: "+cash1.ToString());
      Console.ReadLine();
    }
  }
  class Money
  {
    private decimal amount;
   
    public decimal Amount
    {
      get
      {
        return amount;
      }
      set
      {
        amount=value;
      }
    }
    public override string ToString()
    {
      return "$"+Amount.ToString();
    }
  }
}

结果如下:

D:/c#001>mainentrypoint
cash1.ToString() return: $40

二、扩展方法。

如果没有类的源代码,要给类添加功能,就要使用到扩展方法,它允许改变一个类,但不需要类的源代码。

假设给上面一个类Money加入一个方法AddToAmount(decimal amountToAdd),但是类的源代码不能修改,可以如下创建:

namespace Chapter3.Extensions
{
  public static class MoneyExtension
  {
    public static void AddToAmount(this Money money,decimal amountToAdd)
    {
      money.Amount+=amountToAdd;
    }
  }
}

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

使用方法如下:

cash1.AddToAmount(10M);

即使扩展方法是静态的,也要使用标准的实例方法语法。

如果扩展方法与类中的某个方法同名,扩展方法就从来不会被调用,类中已有的实例方法优先。

一、Object类

所有的.net类都派生于System.Object。如果在定义类时没有指定基类,编译器就会自动假设这个类派生于Object。对于结构总是派生于System.ValueType,而System.ValueType派生于System.Object。

1、System.Object方法

ToString()方法,是获取对象的字符串表示的一种快捷方式。当只需要快速获取对象内容,以用以调试时,就可以使用这个方法。在数据格式化方面功能弱,如果考虑用户的格式化配置或区域,就应实现IFormattable接口。

GetHashTable()方法,如果对象放在名为映射(散列表或字典)的数据结构中,就可以使用该方法,可以确定把对象放在结构的什么地方。

Equals()方法 与==有微妙的区别,以后会讨论

Finalize()方法接近c++中的析构函数,在引用对象被回收,以清理资源时调用。如果对象拥有对未托管资源的引用。则在该对象被删除时,就需要删除这些引用,此时要重写Finalize()。

GetType()方法:这个方法返回从System.Type派生的类的一个实例。

MemberwiseClone()方法 用来复制对象,返回一个对副本的引用,不能复制外部的对象,不能重写它的代码。

2、ToString()方法

是快速获得对象字符串表示的最便捷方式。如:

int i=-50;
String str=i.ToString();   // retruns "-50"

例子:

enum Colors{Red,Orange,Yellow};
//later on in code ...
Colors favoriteColor=Colors.Orange;
String str=favoriteColor.ToString(); // returns "Orange"

如果不在自己的类中重写ToString(),该类继承System.Object的执行方式-显示类的名称。如果想让该方法,显示类中的值信息,就需要重写该函数,例如:

using System;

namespace Wrox.ProCSharp.OOCSharp
{
  class MainEntryPoint
  {
    static void Main(String[] args)
    {
      Money cash1=new Money();
      cash1.Amount=40M;
      Console.WriteLine("cash1.ToString() return: "+cash1.ToString());
      Console.ReadLine();
    }
  }
  class Money
  {
    private decimal amount;
   
    public decimal Amount
    {
      get
      {
        return amount;
      }
      set
      {
        amount=value;
      }
    }
    public override string ToString()
    {
      return "$"+Amount.ToString();
    }
  }
}

结果如下:

D:/c#001>mainentrypoint
cash1.ToString() return: $40

二、扩展方法。

如果没有类的源代码,要给类添加功能,就要使用到扩展方法,它允许改变一个类,但不需要类的源代码。

假设给上面一个类Money加入一个方法AddToAmount(decimal amountToAdd),但是类的源代码不能修改,可以如下创建:

namespace Chapter3.Extensions
{
  public static class MoneyExtension
  {
    public static void AddToAmount(this Money money,decimal amountToAdd)
    {
      money.Amount+=amountToAdd;
    }
  }
}

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

使用方法如下:

cash1.AddToAmount(10M);

即使扩展方法是静态的,也要使用标准的实例方法语法。

如果扩展方法与类中的某个方法同名,扩展方法就从来不会被调用,类中已有的实例方法优先。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值