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

  

转载于:https://www.cnblogs.com/MoRanQianXiao/p/7803338.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1.系统界面:就三项选择功能键。 练习/考试/设置 2.练习第一界面的用户选择及练习内容选择。 3.测试第一页面与练习页面基本相同,但没有测试项目的情况下无法进入本页。如只有一个测试项目的情况下系统不会出现选择文本的列表框。 4.练习/测试页面。应该是本系统最核心的部分了。 功能:1.页面内容无法复制及粘贴,包括从外都没无法复制到本输入框中,光标始终在输入文本最后,输入后无法修改中间的文本; 2.开始输入以键盘击键即开始,到时间或输入全部内容后结束。结束后无法再输入; 3.输入对错自动判断,当输入正确,原字符变绿,错误则变红,当前输入字符突出显示; 4.进度实时显示,并上传服务器。管理员可以随时了解每位学生的输入情况; 5.练习/测试的排名前10学生及输入速度显示。 5.管理员登录界面。 6.后台的学生导入。 7.后台的练习文本管理。练习时间的管理;添加/删除练习文本功能,学生使用练习文本的次数会被记录。 8.后台的测试文本管理。 功能:1.每个测试可设置独立的测试时间; 2.设置测试的开放时间和测试的结束时间,有此时间段外将无法登录测试; 3.测试内容的修改及删除功能; 9.练习/测试情况在线/结果的柱状实时显示。 10.练习/测试结果的显示与导出。 本系统基于.net 4.0开发,服务器环境要求:IIS+.net4.0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值