5.成员方法

5.面向对象-封装-成员方法


5.1 知识点

成员方法申明

基本概念

  • 成员方法(函数)用来表现对象行为
  • 申明在类语句块中
  • 用来描述对象的行为
  • 规则和函数申明规则相同
  • 受到访问修饰符规则影响
  • 返回值参数不做限制
  • 方法数量不做限制

注意:

  • 成员方法不要加 static 关键字
  • 成员方法必须实例化出对象再通过对象来使用,相当于该对象执行了某个行为
  • 成员方法受到访问修饰符影响

申明人类成员方法

// 人类
class Person
{
    // 成员变量,有些人习惯把它写在成员方法后面也可以

    public string name; // 名字
    public int age; // 年龄
    public Person[] friends; // 朋友们

    /// <summary>
    /// 判断是否成年
    /// </summary>
    /// <returns></returns>
    public bool IsAdult()
    {
        return age >= 18;
    }

    /// <summary>
    /// 说话的行为
    /// </summary>
    /// <param name="str">说话的内容</param>
    public void Speak(string str)
    {
        Console.WriteLine("{0}说{1}", name, str);
    }

    /// <summary>
    /// 添加朋友的方法
    /// </summary>
    /// <param name="p">传入新朋友</param>
    public void AddFriend(Person p)
    {
        // 如果朋友数组是空
        if (friends == null)
        {
            // new一个朋友们数组,把当前朋友传进去 
            friends = new Person[] { p };
        }
        // 否则有朋友数组
        else
        {
            // 新建一个新朋友数组,长度是老朋友数组+1
            Person[] newFriends = new Person[friends.Length + 1];

            // 遍历逐个搬家
            for (int i = 0; i < friends.Length; i++)
            {
                newFriends[i] = friends[i];
            }

            // 把新加的朋友放到最后一个
            newFriends[newFriends.Length - 1] = p;

            // 地址重定向
            friends = newFriends;
        }
    }
}

成员方法的使用

主函数内

// 成员方法必须实例化出对象再通过对象来使用,相当于该对象执行了某个行为
Person p1 = new Person();
p1.name = "林文韬";
p1.age = 18;
p1.Speak("我爱你"); // 林文韬说我爱你

if (p1.IsAdult()) // 年龄大于18才会输出
{
    p1.Speak("我要耍朋友");
}

Person p2 = new Person();
p2.name = "火山哥";
p2.age = 16;

p1.AddFriend(p2); // p1添加新朋友p2

// 遍历p1朋友数组,输出p1所有朋友的名字
for (int i = 0; i < p1.friends.Length; i++)
{
    Console.WriteLine(p1.friends[i].name); // 火山哥
}

总结

  • 成员方法
    • 描述行为
    • 类中声明
    • 任意数量
    • 返回值和参数根据需求决定

5.2 知识点代码

using System;

namespace Lesson3_封装_成员方法
{
    #region 知识点一 成员方法申明

    //基本概念
    //成员方法(函数) 用来表现对象行为
    // 1.申明在类语句块中
    // 2.是用来描述对象的行为的
    // 3.规则和函数申明规则相同
    // 4.受到访问修饰符规则影响
    // 5.返回值参数不做限制
    // 6.方法数量不做限制

    //注意:
    //1.成员方法不要加static关键字
    //2.成员方法 必须实例化出对象 再通过对象来使用 相当于该对象执行了某个行为
    //3.成员方法 受到访问修饰符影响

    //人 类
    class Person
    {
        //成员变量 有些人习惯把他写在成员方法后面 都可以

        public string name;//名字
        public int age;//年龄
        public Person[] friends;//朋友们

        /// <summary>
        /// 判断是否成年
        /// </summary>
        /// <returns></returns>
        public bool IsAdult()
        {
            return age >= 18;
        }

        /// <summary>
        /// 说话的行为
        /// </summary>
        /// <param name="str">说话的内容</param>
        public void Speak(string str)
        {
            Console.WriteLine("{0}说{1}", name, str);
        }

        /// <summary>
        /// 添加朋友的方法
        /// </summary>
        /// <param name="p">传入新朋友</param>
        public void AddFriend(Person p)
        {
            //如果朋友数组是空
            if(friends == null)
            {
                //new一个朋友们数组 把当前朋友传进去 
                friends = new Person[] { p };
            }
            //否则有朋友数组
            else
            {
                //新建一个 新朋友数组 长度是老朋友数组+1
                Person[] newFriends = new Person[friends.Length + 1];

                //遍历逐个搬家
                for (int i = 0; i < friends.Length; i++)
                {
                    newFriends[i] = friends[i];
                }

                //把新加的朋友放到最后一个
                newFriends[newFriends.Length - 1] = p;

                //地址重定向
                friends = newFriends;
            }
        }
    }

    #endregion

    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("成员方法");

            #region 知识点二 成员方法的使用

            //主函数内

            //成员方法 必须实例化出对象 再通过对象来使用 相当于该对象执行了某个行为
            Person p1 = new Person();
            p1.name = "林文韬";
            p1.age = 18;
            p1.Speak("我爱你");//林文韬说我爱你


            if (p1.IsAdult())//年龄大于18才会输出
            {
                p1.Speak("我要耍朋友");
            }

            Person p2 = new Person();
            p2.name = "火山哥";
            p2.age = 16;

            p1.AddFriend(p2);//p1添加新朋友p2

            //遍历p1朋友数组 输出p1所有朋友的名字
            for (int i = 0; i < p1.friends.Length; i++)
            {
                Console.WriteLine(p1.friends[i].name);//火山哥
            }

            #endregion
        }
    }
    //总结
    //成员方法
    //描述行为
    //类中申明
    //任意数量
    //返回值和参数根据需求决定
}

5.3 练习题

基于成员变量练习题,为人类定义说话、走路、吃饭等方法

class语句块外 namespace语句块内

// class语句块外 namespace语句块内
//声明人类
class Person
{
    //成员变量
    public string name;
    public float height;
    public int age;
    public string homeAddress;

    //成员方法
    public void Speak(string str)
    {
        Console.WriteLine("{0}说{1}", name, str);
    }

    public void Walk()
    {
        Console.WriteLine("{0}开始走路了", name);
    }

    public void Eat(Food f)
    {
        Console.WriteLine("{0}吃了{1}", name, f.name);
    }
}

基于成员变量练习题,为学生类定义学习、吃饭等方法

class语句块外 namespace语句块内

// class语句块外 namespace语句块内
//声明学生类
class Student
{
    //成员变量
    public string name;
    public int number;
    public int age;
    public Student deskmate;

    //成员方法
    public void Learn()
    {
        Console.WriteLine("{0}在学习", name);
    }

    public void Eat(Food f)
    {
        Console.WriteLine("{0}开始吃{1}", name, f.name);
    }
}

定义一个食物类,有名称,热量等特征,思考如何和人类以及学生类联系起来

class语句块外 namespace语句块内

// class语句块外 namespace语句块内
//声明食物类
class Food
{
    //成员变量
    public string name;
    public int kaLuli;

    //成员方法
    //吃食物不同参数的成员方法重载
    public void BeiEat(Person p)
    {
        Console.WriteLine("{0}吃了{1}", p.name, name);
    }

    public void BeiEat(Student s)
    {
        Console.WriteLine("{0}吃了{1}", s.name, name);
    }
}

主函数内

// 主函数内
Person p = new Person();
p.name = "林文韬";

Student s = new Student();
s.name = "小火";

Food f = new Food();
f.name = "火龙果";

p.Eat(f);   // 林文韬吃了火龙果
s.Eat(f);   // 小火开始吃火龙果

f.BeiEat(p);   // 林文韬吃了火龙果
f.BeiEat(s);   // 小火吃了火龙果

5.4 练习题代码

using System;

namespace Lesson3_练习题
{
    #region 练习题一
    //基于成员变量练习题
    //为人类定义说话、走路、吃饭等方法

    //class语句块外 namespace语句块内

    //声明 人 类
    class Person
    {
        //成员变量
        public string name;
        public float height;
        public int age;
        public string homeAddress;

        //成员方法
        public void Speak(string str)
        {
            Console.WriteLine("{0}说{1}", name, str);
        }

        public void Walk()
        {
            Console.WriteLine("{0}开始走路了", name);
        }

        public void Eat( Food f )
        {
            Console.WriteLine("{0}吃了{1}", name, f.name);
        }
    }

    #endregion

    #region 练习题二
    //基于成员变量练习题
    //为学生类定义学习、吃饭等方法

    //class语句块外 namespace语句块内

    //声明 学生 类
    class Student
    {
        //成员变量
        public string name;
        public int number;
        public int age;
        public Student deskmate;

        //成员方法
        public void Learn()
        {
            Console.WriteLine("{0}在学习", name);
        }

        public void Eat(Food f)
        {
            Console.WriteLine("{0}开始吃{1}", name, f.name);
        }
    }

    #endregion

    #region 练习题三
    //定义一个食物类,有名称,热量等特征
    //思考如何和人类以及学生类联系起来

    //class语句块外 namespace语句块内

    //声明 食物 类
    class Food
    {
        //成员变量
        public string name;
        public int kaLuli;

        //成员方法
        //吃食物不同参数的成员方法重载
        public void BeiEat(Person p)
        {
            Console.WriteLine("{0}吃了{1}", p.name, name);
        }

        public void BeiEat(Student s)
        {
            Console.WriteLine("{0}吃了{1}", s.name, name);
        }
    }

    #endregion

    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("成员方法练习题");

            #region 练习题三

            //主函数内

            Person p = new Person();
            p.name = "林文韬";

            Student s = new Student();
            s.name = "小火";
            
            Food f = new Food();
            f.name = "火龙果";

            p.Eat(f);//林文韬吃了火龙果
            s.Eat(f);//小火开始吃火龙果

            f.BeiEat(p);//林文韬吃了火龙果
            f.BeiEat(s);//小火吃了火龙果

            #endregion
        }
    }
}


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏