C#中方法的调用
1.同一个类中方法的调用:
静态方法可以直接调用静态方法
静态方法不能直接调用非静态方法,静态方法先生成。
非静态方法可以直接调用静态方法
如果静态方法要调用非静态的方法,必须使用实例成员
2.不同类中方法的调用
静态方法,使用类名.静态方法名称()
非静态方法使用,类的实例对象.方法名称()
3.方法的调用遵循的原则:一一对应原则,永远默认都是第一个实参赋值给第一个形参
* 类型需要一致,double--float,子类可以替换父类(反例)
* 数量需要一致,params,还可以有默认值(反例)
* 顺序需要一致 ,可以使用“参数=值”的方式,可选参数必须出现在所有必选按参数之后。
* 如果某个参数使用了(参数:值)的方式,那么之后的所有参数也必须使用这种格式。
4.普通参数传递时的特点
* 传递参数就是传递栈空间里面存储内容的副本
* 如果是值类型,那么栈空间里面存储的是真实的值
* 如果是引用那么栈空间里面存储的就是引用地址。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace 方法调用的原则
{
class Program
{
/*
* 方法调用遵循的原则:一一对应原则,永远都是第一个实参赋值给第一个形参
* 1.类型需要一致:(double-->float--int 子类可以替换父类)---【反例】
* 2.数量需要一致:(params,还可以有默认值)---【反例】
* 3.顺序需要一致:可以使用”参数:值“的方式,这种方式术语是--命名参数。(PS:普通的参数传递,术语是:【位置参数】-->就是说每个实参,必须一一形参的位置)
*/ static void Main(string[] args)
{
//2.数量需要一致:(params)---【反例】
GetSameParams("cfs",);
GetSameParams("cfs", ,,,); //2.数量需要一致:还可以有默认值)---【反例】
ShowInfo();
ShowInfo(, "哈哈"); //3.顺序需要一致:可以使用”参数:值“的方式,这种方式术语是--命名参数。(PS:普通的参数传递,术语是:【位置参数】-->就是说每个实参,必须一一形参的位置) GetName(lastName: "fangsheng", firstName: "cao",age: ); //正确调用方式 GetName(age:, lastName: "fangsheng", firstName: "cao" ); //正确的调用方式,可以不必按照方法参数的顺序调用方法。【命名参数的方式调用】
//GetName(lastName: "fangsheng", firstName: "cao",23);//错误调用方法的例子:命名参数必须出现在所有指定的固定参数后面。【//如果某个参数值,使用了命名参数的方式,那么后面所有的参数,也必须使用这种格式。】 } #region 3.顺序需要一致:可以使用”参数:值“的方式,这种方式术语是--命名参数。(PS:普通的参数传递,术语是:【位置参数】-->就是说每个实参,必须一一形参的位置)
/// <summary>
/// 3.顺序需要一致:可以使用”参数:值“的方式,这种方式术语是--命名参数。(PS:普通的参数传递,术语是:【位置参数】-->就是说每个实参,必须一一形参的位置)
/// </summary>
/// <param name="firstName"></param>
/// <param name="lastName"></param>
static void GetName(string firstName, string lastName, int age)
{ }
#endregion #region 2.数量需要一致:(params,还可以有默认值)---【反例】
/// <summary>
///2. 参数数组,数量可以随便传
/// </summary>
/// <param name="name"></param>
/// <param name="age"></param>
/// <param name="intParamsArray"></param>
static void GetSameParams(string name, int age, params int[] intParamsArray)
{ } #endregion #region 可选参数必须在所有必选参数后【错误范例】
/// <summary>
/// 可选参数必须在所有必选参数后【错误范例】
/// </summary>
/// <param name="age"></param>
/// <param name="name"></param>
//static void Show(int age = 30, string name) //可选参数必须在所有必选参数后【错误范例】
//{ //}
#endregion #region 2.数量需要一致:(params,还可以有默认值)---【反例】
/// <summary>
/// 2.数量需要一致:(params,还可以有默认值)---【反例】
/// </summary>
/// <param name="age"></param>
/// <param name="name"></param>
static void ShowInfo(int age = , string name = "")
{ }
#endregion #region 1.类型需要一致:(double-->float--int 子类可以替换父类)---【反例】 #region double-->--int
/// <summary>
/// double-->--int
/// </summary>
/// <returns></returns>
static double GetValue()
{
int a = ;
return a;//返回int类型的数
}
#endregion #region double-->float
/// <summary>
/// double-->float
/// </summary>
/// <param name="num"></param>
/// <returns></returns>
static double GetValue(int num)
{
float a = 1.34F;
return a;
}
#endregion #region 返回值为父类,可以返回子类
/// <summary>
/// 返回值为父类,可以返回子类
/// </summary>
/// <returns></returns>
static A GetValue1()
{
B b = new B();
return b;
}
#endregion }
#region 父子类测试
class A
{
int member;
}
/// <summary>
/// B继承A
/// </summary>
class B : A
{ }
#endregion #endregion }