C#进阶——各种方法特性

静态方法
特点:1、生命周期一旦创建–应用结束才会结束 2、全局 3、效率高
用处:用户登录信息、系统配置信息、系统设置、SQLHelper
注意:静态的东西创建多了占用内存会很大,不是必要的情况不要创建静态的对象
调用:静态方法中调用非静态方法时,不可以直接调用,需要把所在类初始化以后再调用
Form1 form1 = new Form1();
form1.Test();
在这里插入图片描述
构造方法
用处:初始化对象或者初始化一些数据
特点:默认是有一个无参的方法

析构方法
作用:释放对象
谁在使用:GC垃圾回收器在使用
垃圾回收机制:
回收非托管资源——Windows窗口句柄、数据库连接、GDI对象、独占文件锁等等对象

在这里插入图片描述
虚方法(小蜜蜂)
特点:好维护
作用:参数一致、返回值一致, 允许子类派生类,进行重写,也实现不一样的功能
重写方法——override

namespace CSharpAdvanced
{
    class Test
    {
        //加法
        public virtual int Calculate(int a,int b)
        {
            return (a + b);
        }
    }

    class VirtualTest:Test		//重写虚函数需要继承其父类
    {
        //乘法
        public override int Calculate(int a, int b)
        {
            //return base.Calculate(a, b);	//直接调用父类的方法
            return (a * b);
        }
    }
}

抽象方法——abstract(大懒虫)
定义:一定要写在抽象类中且不可new,不带函数体,只是写了一个规范,由子类实现
使用场合:强制性一定要实现
与接口区别使用场合:
区别:1、抽象类——单继承(只能继承一个父类,不可继承多个父类);接口——多继承
2、抽象类里可以写普通方法,虚方法;接口只能写规范,不能写实现
使用场合:抽象类一般用于常用不会经常改动,抽象范围大一些的事件(人->男人->女人)
接口适用于经常修改,只是一个规范的地方(比如人要吃饭走路)

namespace CSharpAdvanced
{
    public interface Calculate1
    {
        int Add(int a, int b);
    }
    class InterfaceClass : Calculate1,Calculate2
    {
        public int Add(int a, int b)
        {
            return a + b;
        }

        int Calculate2.Sub(int a, int b)
        {
            return a - b;
        }
    }

}
namespace CSharpAdvanced
{
    public interface Calculate2
    {
        int Sub(int a, int b);
    }
}

扩展方法ExtendMelthod
定义:在非泛型静态类中定义静态方法—>>扩展方法
使用场合:1——调用密封类中的对象、属性或方法。2——扩展接口 3——在Linq链式编程…

1、调用密封类中的对象、属性或方法

namespace CSharpAdvanced
{
    /// <summary>
    /// 假如这个类别人那边拿过来的,不是自己写的
    /// </summary>
    public sealed class Person      //sealed关键字是将此类密封起来,不可随便继承
    {
        public string Name { get; set; }

        public int Age { get; set; }

        public string Phone { get; set; }
        /// <summary>
        /// 返回电话
        /// </summary>
        /// <returns></returns>
        public string GetPhone()
        {
            return Phone;
        }
    }
}

继承:

namespace CSharpAdvanced
{
    /// <summary>
    /// 定义一个静态类,静态方法
    /// </summary>
    public static class PersonExtend
    {
        public static string ShowPhone(this Person person)
        {
            return person.Phone;
        }
    }
}

使用:

//扩展方法
Person person = new Person()
{
    Age = 20,
    Name = "zhang",
    Phone = "123456789"
};
string phone= PersonExtend.ShowPhone(person);
MessageBox.Show(phone.ToString());

2、扩展接口

namespace CSharpAdvanced
{
    public interface ICalculate
    {
        int Add(int a, int b);
    }
}

扩展类接口且实现

namespace CSharpAdvanced
{
    public static class InterfaceExtend 
    {
        public static int Sub(this ICalculate calculate, int a,int b)
        {
            return a - b;
        }

        public static int Maltiply(this ICalculate calculate, int a, int b)
        {
            return a * b;
        }

        public static int Division(this ICalculate calculate, int a, int b)
        {
            return a / b;
        }
    }
}

接下来其他类继承时,就不需要全部接口实现,只需要实现主接口中定义的接口即可,但在使用时是可以使用扩展接口中的方法的,这样就省去了很多不必要的接口实现

namespace CSharpAdvanced
{
    class AAAAAA : ICalculate
    {
        public int Add(int a, int b)
        {
            //throw new NotImplementedException();
            return a + b;
        }
    }
}

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值