1、方法可以傳值類型,引用類型、傳可變參數
2、用ref和out将傳值類型改為傳引用類型。
例1:ref舉例
class Program
{
static void Print(ref int i)
{
i = 10;
}
static void Main(string[] args)
int i = 0;
Print(ref i);
Console.WriteLine(i);
}
輸出結果:10;
例2:out舉例
static void Print(out int i)
int i;
Print(out i);
Out和ref的差別:
1、使用ref參數時,傳入的參數必須首先被初始化,out不需要,但必須在方法中完成初始化。
2、使用out和ref時,在方法的參數和執行方法時,都要加上ref和out關鍵字,以滿足比對。
3、out使用在需要return多個傳回值的地方,而ref則用在需要被調用的方法修改調用者的引用的時候。方法參數上的out方法參數關鍵字引用傳遞到方法的同一變量。當控制傳遞回調方法時,在方法中對參數所做的任何更改都将反應在該變量中。
例:傳引用舉例
public class Student
public int Age { get; set; }
class Program
static void Print(Student s)
s.Age = 10;
Student st = new Student();
st.Age = 0;
Print(st);
Console.WriteLine(st.Age);
}
輸出結果:10
注:此種寫法依然是傳值,結果為0
static void Print(int i)
Print(st.Age); Console.WriteLine(st.Age);
}
在方法形參前加上params就是可變參
數
傳可變參數舉例:
class Program
static void Print(params int[] s)
s[0] = 10;
Print(1, 2, 3, 4);
注:當有多個參數時,parames隻能修飾最後一個參數,例:static void Print(int[] arr,parames string s)
注:如果方法參數是接口,那麼調用該方法的時候,參數可以是實作該接口的任意對象。
如果方法作為接口的傳回類型,方法可以傳回實作該接口的類的對象。
例:
namespace JieKou
{
public interface IFly
void Fly();
public class Bird : IFly
#region IFly 成員
public void Fly()
Console.WriteLine("Bird.IFly");
#endregion
public class Plane : IFly
Console.WriteLine("Plane.IFly");
輸出結果:
Bird.IFly
Plane.IFly
public static IFly Do()
return new Bird();
public static void Do(IFly ly)
ly.Fly();
Bird b = new Bird();
Do(b);
Plane p = new Plane();
Do(p);
IFly ly = Do();