zoukankan      html  css  js  c++  java
  • C#类型成员:方法

    一、方法

      方法的基本结构:返回值 方法名(参数){ 内容 },其中无返回值时用void,有返回值时用返回值类型,参数可以是零到无限个,参数由参数类型和参数名组成。

    1 void Method1() { }                      //无返回值、无参数的方法
    2 void Method2(int i) { }                 //无返回值、有一个参数的方法
    3 int Method3(bool b, string s) { }       //返回值为int、有二个参数的方法
    4 class class1 { }                        //定义一个类作为参数或者返回值
    5 class1 Method4(float f, class1 c) { }   //返回值为class、有二个参数的方法

      方法又称为函数,它既可以作为一个独立的功能,又可以作为类的行为。

      作为独立功能:洗衣机

     1 /// <summary>
     2 /// 洗衣机的功能
     3 /// </summary>
     4 /// <param name="clothing">投放衣物</param>
     5 /// <param name="detergent">投放洗涤剂(单位:克)</param>
     6 /// <param name="wash">选择洗漂(true或false)</param>
     7 /// <param name="dehydration">选择脱水(true或false)</param>
     8 /// <param name="duration">设定时长(单位:分钟)</param>
     9 /// <returns>返回结果</returns>
    10 public string WashingMachine(string clothing, int detergent, bool wash, bool dehydration, int duration)
    11 {
    12     if (clothing == null)
    13     {
    14         return "请放入衣物";
    15     }
    16     if (duration < 5)
    17     {
    18         return "洗衣时长不能小于5分钟";
    19     }
    20     else
    21     {
    22         float washTime;         //洗漂时长
    23         float dehydrationTime;  //脱水时长
    24         if (wash)
    25         {
    26             washTime = dehydration ? duration * 2 / 3 : duration;
    27             if (detergent <= 0)
    28             {
    29                 return "洗漂需要投放洗涤剂";
    30             }
    31             else
    32             {
    33                 //开始洗漂衣物
    34             }
    35         }
    36         if (dehydration)
    37         {
    38             dehydrationTime = wash ? duration - washTime : duration;
    39             //开始脱水衣物
    40         }
    41         return "完成";
    42     }
    43 }

      作为类的行为:洗衣机

     1 /// <summary>
     2 /// 洗衣机的类
     3 /// </summary>
     4 public class WashingMachine
     5 {
     6     #region 字段
     7     /// <summary>
     8     /// 时长(单位:分钟)
     9     /// </summary>
    10     public int duration;
    11     #endregion
    12 
    13     #region 方法
    14     /// <summary>
    15     /// 投放
    16     /// </summary>
    17     /// <param name="clothing">衣物</param>
    18     /// <param name="detergent">洗涤剂(单位:克)</param>
    19     public void ThrowIn(string clothing, int detergent) { }
    20 
    21     /// <summary>
    22     /// 洗脱功能
    23     /// </summary>
    24     public void All() { }
    25 
    26     /// <summary>
    27     /// 洗漂功能
    28     /// </summary>
    29     public void Wash() { }
    30 
    31     /// <summary>
    32     /// 脱水功能
    33     /// </summary>
    34     public void dehydration() { }
    35 
    36     /// <summary>
    37     /// 设定时长
    38     /// </summary>
    39     /// <param name="duration">时长(单位:分钟)</param>
    40     public void SettingTime(int duration) { }
    41 
    42     /// <summary>
    43     /// 开启洗衣机
    44     /// </summary>
    45     public void Open() { }
    46 
    47     /// <summary>
    48     /// 关闭洗衣机
    49     /// </summary>
    50     public void Close() { }
    51     #endregion
    52 }

      方法作为独立功能对比作为类的行为优点是代码少、运行快,缺点则是维护性和扩展性差;

      方法作为类的行为对比作为独立功能缺点是代码多、运行慢,优点则是维护性和扩展性好。

      C#中有一种功能特殊的方法:构造函数。

     二、方法的重载

      当多个方法所做的事相同,但是参数的个数和参数的类型不同时,会出现同一件事方法名不同,这样既不利于记忆也不利于维护,所以C#支持方法名相同,但是参数个数或者参数类型不同的方法,这种方法叫方法的重载(参数个数相同,类型不同时,参数顺序不同也是重载)。

      比如洗衣机的投放方法,当我只想脱水的时候,我只想传入一个参数衣物;有时我需要衣物按件来放,而不是传入衣物。

     1 public class WashingMachine
     2 {
     3     /// <summary>
     4     /// 投放
     5     /// </summary>
     6     /// <param name="clothes">衣物件数</param>
     7     public void ThrowIn(int clothes) { }
     8 
     9     /// <summary>
    10     /// 投放
    11     /// </summary>
    12     /// <param name="clothing">衣物</param>
    13     public void ThrowIn(string clothing) { }
    14 
    15     /// <summary>
    16     /// 投放
    17     /// </summary>
    18     /// <param name="clothes">衣物件数</param>
    19     /// <param name="detergent">洗涤剂(单位:克)</param>
    20     public void ThrowIn(int clothes, int detergent) { }
    21 
    22     /// <summary>
    23     /// 投放
    24     /// </summary>
    25     /// <param name="clothing">衣物</param>
    26     /// <param name="detergent">洗涤剂(单位:克)</param>
    27     public void ThrowIn(string clothing, int detergent) { }
    28 
    29     /// <summary>
    30     /// 投放(参数个数相同,类型不同时,参数顺序不同)
    31     /// </summary>
    32     /// <param name="clothing">衣物</param>
    33     /// <param name="detergent">洗涤剂(单位:克)</param>
    34     public void ThrowIn(int detergent, string clothing) { }
    35 }

      关联:方法的重载与方法的重写的对比(见C#多态)

      后期补充。

  • 相关阅读:
    BZOJ3456: 城市规划
    BZOJ4555: [Tjoi2016&Heoi2016]求和
    关于wqs二分(凸优化) 实数二分和整数二分的一些讨论
    求逆矩阵模板
    再探模拟费用流一类问题
    「九省联考 2018」秘密袭击(差分+生成函数+拉格朗日插值+整体dp+线段树合并):
    「九省联考 2018」IIIDX(贪心+线段树(平衡树)):
    【GDOI2020模拟03.28】数二数(two) (计数动态规划):
    「十二省联考 2019」骗分过样例(提答+数论+乱搞):
    二进制分组学习小记:
  • 原文地址:https://www.cnblogs.com/yaojieyuan/p/11255933.html
Copyright © 2011-2022 走看看