C#类成员—方法


1 方法的概念


    用于表示类的行为与功能。

  • 如人:吃饭、睡觉、走路、干活
  • 动物:攻击、御敌、觅食、生殖
  • 汽车:启动、停止、前进、后退


2 方法的声明


    方法使用标准函数格式与可选的static修饰符来声明。

    【修饰符】 返回值类型 <方法名>(【参数】)

    {

    //方法体

    }

3 方法的调用


    详细见“C#静态字段与非静态字段”http://blog.csdn.net/liyongliang_2012/article/details/7937123


4  方法的修饰符

访问修饰符表示含义
无或private只能在所属类中访问
public访问不受限,即在任何地方都可以访问
internal只能在所属项目中访问
protected只能在所属类或由其派生而来的类中访问
protected internal只能在所属项目或从所属类派生而来的类中访问;
警告:C#未提供此概念,其实际效果要么是protected,要么是internal

总结1:访问级别由高到低是——public、internal、protected、private——PIPP


其他修饰符表示含义
static静态成员,也称共享成员,可以在类的实例之间共享,故可以将它们看作是类的全局对象。
  



5.方法的重载(overload)与重写(override)


5.1方法的重载

     在一个类中定义多个方法名相同但参数列表(数目、类型、顺序)不同的方法,通过传递参数的不同来决定调用哪一个方法的操作叫做方法的重载(overload)。注意:仅是返回值不同并不能算是方法的重载,系统是要报错的。

【示例一】不同数量的参数方法重载演示

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace 不同数量的参数方法重载演示
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("不同数量的参数方法重载---二元三元四元加法运算");
            Console.WriteLine("二元加法运算");
            Console.Write("输入第一个数:");
            int v1 = int.Parse(Console.ReadLine());
            Console.Write("输入第二个数:");
            int v2 = int.Parse(Console.ReadLine());
            con c = new con();
            c.con1(v1, v2);//调用方法
            Console.WriteLine("三元加法运算");
            Console.Write("输入第一个数:");
            v1 = int.Parse(Console.ReadLine());
            Console.Write("输入第二个数:");
            v2 = int.Parse(Console.ReadLine());
            Console.Write("输入第三个数:");
            int v3 = int.Parse(Console.ReadLine());
            c.con1(v1, v2, v3);//调用方法
            Console.WriteLine("四元加法运算");
            Console.Write("输入第一个数:");
            v1 = int.Parse(Console.ReadLine());
            Console.Write("输入第二个数:");
            v2 = int.Parse(Console.ReadLine());
            Console.Write("输入第三个数:");
            v3 = int.Parse(Console.ReadLine());
            Console.Write("输入第三个数:");
            int v4 = int.Parse(Console.ReadLine());
            c.con1(v1, v2, v3,v4);//调用方法
            Console.ReadLine();
        }
    }
    class con
    {
        public void con1(int value1, int value2)
        {
            Console.WriteLine(value1+"+"+value2+"={0}",value2+value1);
        }
        public void con1(int value1, int value2,int value3)//重载con1方法
        {
            Console.WriteLine(value1 + "+" + value2 +"+"+value3+"={0}",value3+value2 + value1);
        }
        public void con1(int value1, int value2, int value3,int value4)//重载con1方法
        {
            Console.WriteLine(value1 + "+" + value2 + "+" + value3 +"+"+value4+"={0}",
                value3 + value2 + value1+value4);
        }
    }
}

运行结果


【示例2】不同类型参数的方法重载演示

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace 不同类型参数的方法重载演示
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("不同类型参数的方法重载---整型数加法、双精度浮点数加法");
            Console.WriteLine("整型数加法");
            Console.Write("输入第一个整型数:");
            int v1 = int.Parse(Console.ReadLine());
            Console.Write("输入第二个整型数:");
            int v2 = int.Parse(Console.ReadLine());
            con c = new con();
            c.con1(v1, v2);//调用方法
            Console.WriteLine("双精度浮点数加法");
            Console.Write("输入第一个浮点数:");
            double v3 = double.Parse(Console.ReadLine());
            Console.Write("输入第二个浮点数:");
            double v4 = double.Parse(Console.ReadLine());
            c.con1(v3, v4);//调用方法
            Console.ReadLine();
        }
    }
    class con
    {
        public void con1(int value1, int value2)
        {
            Console.WriteLine(value1+"+"+value2+"={0}",value2+value1);
        }
        public void con1(double value1, double value2)//重载con1方法
        {
            Console.WriteLine(value1 + "+" + value2 + "={0}", value2 + value1);
        }
    }
}

运行结果



5.2 方法的重写

    返回值类型、方法名、参数列表完全相同。方法重写又称方法的覆盖,指的是在子类中重新定义(从)父类中(继承而来)的方法。注意:必须用virtual声明父类(基类)方法为虚,用override声明此方法的重写。

  • 不能重写非虚方法或静态方法。重写的基方法必须是 virtual、abstract 或 override 的。为什么 override 也可以重写呢?因为基类中的 override 实际上是对基类的基类进行的重写,由于继承可传递,所以也可以对基类中 override 的方法进行重写。
    override 声明不能更改 virtual 方法的可访问性。override 方法和 virtual 方法必须具有相同的访问级别修饰符。
    不能使用修饰符 new、static、virtual 或 abstract 来修改 override 方法。
    重写属性声明必须指定与继承属性完全相同的访问修饰符、类型和名称,并且被重写的属性必须是 virtual、abstract 或 override 的。
  •           重写override一般用于接口实现和继承类的方法改写,要注意:
              1、覆盖的方法的标志必须要和被覆盖的方法的名字和参数完全匹配,才能达到覆盖的效果;
              2、覆盖的方法的返回值必须和被覆盖的方法的返回一致;
              3、覆盖的方法所抛出的异常必须和被覆盖方法的所抛出的异常一致,或者是其子类;
              4、被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。

【示例】

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace 方法重写演示
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("方法重写----咖啡列表");
            Coffee coffee = new Coffee();
            coffee._coffee();

            Coffee klcoffee = new kl();
            klcoffee._coffee();
            
            bm bmcoffee =new bm();
            bmcoffee._coffee();
            
            m mcoffee = new m();
            mcoffee._coffee();
            Console.ReadLine();
        }
    }
    class Coffee
    {
        public virtual void _coffee()
        {
            Console.WriteLine("咖啡");
        }
    }
    class kl : Coffee
    {
        public override void _coffee()
        {
            Console.WriteLine("麝香猫咖啡");
        }
    }
    class bm : Coffee
    {
        public override void _coffee()
        {
            Console.WriteLine("蓝山咖啡");
        }
    }
    class m : Coffee
    {
        public override void _coffee()
        {
            Console.WriteLine("摩卡咖啡");
        }
    }
}

运行结果


5.3方法的重载与重写的比较

6.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值