有参方法语法:
<访问修饰符> 返回类型 <方法名>(<形式参数列表>)
{
//方法的主体
}
案例一:
定义一个榨汁机类,能够实现按不同的水果榨出不同的水果汁
//定义一个榨汁机类
namespace demo5
{
/// <summary>
/// 榨汁机
/// </summary>
public class Zhazhiji
{
/// <summary>
/// 榨汁机功能
/// </summary>
/// <param name="fruit"></param>
/// <returns>水果汁</returns>
public string Zhazhi(string fruit)//也可以有一个默认值,如:string fruit = "苹果"
{
string juice = fruit + "汁";
return juice;
}
}
}
//在main()方法中调用榨汁机类
namespace demo5
{
class Program
{
static void Main(string[] args)
{
Zhazhiji zhazhiji = new Zhazhiji();//创建榨汁机
//Console.WriteLine("请放入水果:");
for (int i = 1; i <= 3; i++)
{
Console.WriteLine($"请放入第{i}个水果:");
string fruit = Console.ReadLine();
string juice = zhazhiji.Zhazhi(fruit);
Console.WriteLine($"新鲜的{juice}已经榨出来了!");
}
}
}
}
【注1】
如果要多次重复使用某一个类,不需要每一次都去调用该类,也就是说不需要每次榨汁都去创建一个新的榨汁机对象,在实际中它意味着每次榨汁不需要都用一台新的榨汁机。
正确而做法是,创建一个榨汁机类,利用循环语句反复调用类中的功能即可
【注2】
其实也可以用无参方法来定义
//定义榨汁机类
public class Zhazhiji
{
public string fruit;
public string Zhazhi()
{
string juice = fruit + "汁";
return juice;
}
}
只能够单独使用
static void Main(string[] args)
{
Zhazhiji zhazhiji = new Zhazhiji();//创建榨汁机
for (int i = 1; i <= 3; i++)
{
Console.WriteLine($"请放入第{i}个水果:");
zhazhiji.fruit = Console.ReadLine();
string juice = zhazhiji.Zhazhi(zhazhiji.fruit);
Console.WriteLine($"新鲜的{juice}已经榨出来了!");
}
}
利用这种无参方法定义榨汁机类,使用完功能(方法)之后,fruit 变量无法释放,生命周期一直持续下去
如果使用带参方法,那么每次调用完榨汁机的功能之后,fruit 就会被释放,使得整个程序的性能更优
案例二:
(1)定义学生管理类,输入5个学生的姓名,并打印(只有一个参数的方法)
//定义学生管理类
namespace demo5_2
{
class StudentManage
{
//默认分配30个学生名称空间
//成员变量:用于保存30个学生(不会用完就被释放掉)
private string[] names = new string[30];
public void AddName(string name)
{
//用循环给名字赋值
for (int i = 0; i < names.Length; i++)
{
//string 为引用类型:默认没有赋值时,值为null
if (names[i]==null)
{
names[i] = name;
break;//终止循环
}
}
}
/// <summary>
/// 显示学生姓名
/// </summary>
public void ShowName()
{
for (int i = 0; i < names.Length; i++)
{
if(names[i] != null)
{
Console.WriteLine($"第{i + 1}个学生姓名为:{names[i]}");
}
}
}
}
}
//在main()方法中调用类
namespace demo5_2
{
class Program
{
static void Main(string[] args)
{
StudentManage stu = new StudentManage();
for (int i = 0; i < 5; i++)
{
Console.WriteLine("请输入学生的姓名:");
string newName = Console.ReadLine();
stu.AddName(newName);
}
stu.ShowName();
}
}
}
【注】
姓名的排序:按a b c ...z排序
Array.Sort(names);//引用类型改变(传递)地址,names为数组
/// <summary>
/// 显示学生姓名
/// </summary>
public void ShowName()
{
Console.WriteLine("排序前:");
for (int i = 0; i < names.Length; i++)
{
if(names[i] != null)
{
Console.WriteLine($"第{i + 1}个学生姓名为:{names[i]}");
}
}
Array.Sort(names);
Console.WriteLine("\n排序后:");
for (int i = 0; i < names.Length; i++)
{
if(names[i] != null)
{
Console.WriteLine($"第{i + 1}个学生姓名为:{names[i]}");
}
}
}
(2)定义一个查找姓名的类,查找学生是否存在(带多个参数的方法)
//在StudentManage类中定义查找学生类
private string[] names = new string[5] { "小一","小二","小三","小四","小五"};
public bool SearchName(int startIndex,int endIndex,string stuname)
{
bool find = false;//是否找到标识
//在指定区间的数组中,查找姓名是否存在
for (int i = startIndex-1; i < endIndex; i++)
{
if (names[i].Equals(stuname))
{
find = true;
break;
}
}
return find;
}
//在main()中调用查找姓名的方法
StudentManage stu1 = new StudentManage();
Console.WriteLine("请输入要查找的学生姓名:");
string stuname = Console.ReadLine();
Console.WriteLine("请输入要查找的起始索引(1-5之间):");
int startindex = int.Parse(Console.ReadLine());
Console.WriteLine("请输入要查找的终止索引(1-5之间):");
int endindex = int.Parse(Console.ReadLine());
bool flag = stu1.SearchName(startindex, endindex, stuname);
if (flag)
{
Console.WriteLine("找到了!");
}
else
{
Console.WriteLine("没找到!");
}
【注1】键值对可以颠倒顺序
bool flag = stu1.SearchName(1,4,"小四");//正确顺序
bool flag = stu1.SearchName("小四",1,4);//错误顺序
bool flag = stu1.SearchName(stuname:"小四",startIndex:1,endIndex:4);//正确顺序
StudentManage stu1 = new StudentManage();
bool flag = stu1.SearchName(stuname: "小四", startIndex: 1, endIndex: 4);
if (flag)
{
Console.WriteLine("找到了!");
}
else
{
Console.WriteLine("没找到!");
}
【注2】见到[ ]表示可写可不写