無參數有傳回值:方法不包含參數,但有傳回值,可以稱為無參有傳回值的方法(還是以靜态方法為例)
其方法文法格式:
[public] static 傳回值類型 方法名()
{
方法體
return 傳回值(包含在方法體内)
//傳回值的類型與傳回值類型必須是相同(相容)的資料
//相容即可以進行隐式轉換
}
//傳回值的類型決定傳回值類型
//======對比無參數無傳回值方法===========
[public] static void 方法名()
{
方法體
}
有傳回值方法注意事項:
1)如果方法的傳回類型書寫為void,則方法中不能使用return,因為使用void就表示方法是無傳回值的方法
2)将void改為想要傳回資料的資料類型;如想要傳回的資料,類型為int,則傳回值類型為int
3)有傳回值的需要在方法體内通過return關鍵字将1)的資料類型(int)的資料傳回出去
是以有傳回值的 傳回值類型與return必須同時都有(通過參數進行傳回值的除外)
4)return 的類型必須與傳回值類型相同(相容);類型可以是之前說過的任意類型
定義有傳回值的方法
//在同一類中定義的方法
//T1 T2 T3 T4 都是錯誤的方法定義
static void T1()
{
//沒有書寫傳回值類型
return 4;//傳回一個int類型的4
//改正 應将 void 改為 int
}
static int T2()
{
//沒有書寫要傳回的int類型資料
//改正 return int類型的資料
//如 return 6;
}
static int T3()
{
//傳回值與傳回值類型不相同也不相容
return "8";
//改正 應該為進行強制類型轉換為int類型的8
}
static int T4()
{
//不能傳回多個值
return 3,6;
}
//===========================================================
//T5 T6 T7 定義正确的方法
static int T5()
{
//傳回與傳回值類型相同的資料
return 6;
}
static int T6()
{
byte b = 6;
//傳回相容的資料
return b;
}
static int T7()
{
//傳回強制轉換為相同相容類型的資料
string strNum = "8";
////強制轉換相同類型
//int num = Convert.ToInt32(strNum);
////return num;
////強制轉換相容類型
//byte bNum = Convert.ToByte(strNum);
//return bNum;
//不要聲明變量,直接傳回強制轉換後的資料
return Convert.ToInt32(strNum);
}
5)方法的傳回值隻能有一個,不能傳回多個值;如果想傳回多個值的資料現階段可以使用數組,枚舉或結構;使用object類型的數組或者結構可以傳回多個不同類型的資料
6)在外界調用方法的地方一般都會有相同(相容)類型的變量用于接收的方法的傳回值
調用處是否必須有相應類型的變量接收依需要而定;傳回值在外界需要進行其他處理的可以聲明接收變量,如下面T8()傳回值不是周遊而是進行排序
class Program
{
//定義枚舉
enum Gender { 男, 女 }
static void Main(string[] args)
{
//聲明一個nums 的int類型數組用于接收方法T8傳回值
//将方法T8的傳回值指派給nums
int[] nums = T8();
for (int i = 0; i < nums.Length; i++)
{
Console.WriteLine(nums[i]);
}
Console.WriteLine("");
Gender[] sex = T9();
foreach (Gender item in sex)
{
Console.WriteLine(item);
}
Console.ReadKey();
}
//傳回枚舉類型
static Gender[] T9()
{
Gender[] sex = new Gender[2];
sex[0] = Gender.男;
sex[1] = Gender.女;
return sex;
}
//傳回數組類型
static int[] T8()
{
//聲明一個用于傳回int[]類型資料的數組
int[] arr = new int[6];
for (int i = 0; i < arr.Length; i++)
{
//為每一個元素進行指派
Console.WriteLine("請輸入第{0}個元素的值", i + 1);
//可以使用try-catch檢測輸入的是否可以轉換為int類型的資料
arr[i] = int.Parse(Console.ReadLine());
}
//将數組傳回出去
return arr;
}
}
//傳回結構類型資料自己程式設計實作
以T8為例 執行原理:1)在Main()方法中調用T8()方法,T8是具有傳回值的方法,是以聲明一個接收T8傳回值類型的變量用于接收器傳回值 2)執行到T8()方法會進入方法内部依次執行T8()方法内代碼,最後通過return傳回數組 3)傳回的數組資料指派給nums數組變量,最後周遊輸出
7)使用return會跳出方法,是以書寫多個return 隻會傳回第一個return後面的值而且也隻會執行return之前的代碼,return後面的代碼不再執行
return會退出方法
static string T10()
{
Console.WriteLine("(*^﹏^*)正常輸出");
return "張三";//執行到此處退出T10()方法
Console.WriteLine("( >︿< ) return 退出方法無法輸出");
}
static string T11()
{
return "張三";//執行到此處傳回資料張三 退出T11()方法
return "李四";
}
static void Main(string[] args)
{
//隻調用不接收
//因為在這裡不需要進行其他處理
T10();
T11();
Console.ReadKey();
}
示例:輸出數字;方法内部檢測使用者輸入的數字字元串是數字,是:傳回數字;否:一直輸入
檢測使用者輸入的是否為數字
static int OutputNum()
{
int num = 0;
Console.WriteLine("請輸入數字");
while (true)
{
try
{
num = Convert.ToInt32(Console.ReadLine());
break;
//如果轉換沒有異常,表示轉換成功
//break就會退出 while 死循環
//如果轉換出現異常,就會讓使用者一直輸入
}
catch
{
Console.WriteLine("輸入不是數字,請重新輸入");
}
}
return num;//傳回轉換成功的資料
}
//方法内部執行原理
1)詢問 請輸入數字
2)進入死循環
3)進入try語句塊中,接收強制轉換後的資料
如果轉換成功退出死循環
執行return傳回資料,整個方法執行完畢
4)如果轉換失敗 執行catch語句塊中的代碼
再次執行num = Convert.ToInt32(Console.ReadLine());
接收使用者輸入的資料,如果轉換還是失敗
就一直讓使用者輸入
最好使用斷點調試檢視其執行過程,更易了解
static void Main(string[] args)
{
int num = OutputNum();
Console.WriteLine("");//換行
Console.WriteLine("輸入的數字為 {0}",num);
Console.ReadKey();
}
小結:
1) 将傳回值類型的void改變為想要傳回類型的資料類型
2) 傳回值類型必須與傳回值的類型相同或相容
3) 方法隻能傳回一個值;傳回多個值需要使用複雜的資料類型(枚舉,結構與數組)
4) 隻會執行return語句之前的代碼,之後的不會執行