مشخصات مقاله
-
2888
-
0.0
-
5532
-
0
-
0
نکات تکمیلی درباره متدها در سی شارپ (C# methods overview)
در این بخش از آموزش سی شارپ می خواهیم نگاهی عمیق تر به برخی نکات و تکنیک های برنامه نویسی در سی شارپ داشته باشیم. متدها موضوع اصلی بحث ما در این بخش خواهند بود و انواع خروجی آن ها را در زبان سی شارپ با هم بررسی خواهیم کرد.
همانطور که می دانید هنگامی که متد void تعریف می کنید، مقداری بازگردانده نمی شود.
مثال:
using System;
public class Exercise
{
private void Show()
{
Console.WriteLine("C# Programming is fun!!!");
}
public static int Main()
{
Exercise exo = new Exercise();
exo.Show();
return 0;
}
}
در حقیقت، متد void عمل بازگرداندن را انجام می دهد ولی مقداری برنمی گرداند، با این کار به compiler خبر می دهد که زمان خروج از متد فرا رسیده است (زمانی که متد void فراخوان می شود، هیچ مقدار یا نتیجه ای بازگردانده نمی شود و هیچ متغیری نمی توان تخصیص داد). برای این منظور، در بخش مناسب متد void، کافی است کلید واژه ی returnرا تایپ کنید. به مثال زیر توجه کنید.
using System;
public class Exercise
{
private void Show()
{
Console.WriteLine("C# Programming is fun!!!");
return;
}
public static int Main()
{
Exercise exo = new Exercise();
exo.Show();
return 0;
}
}
در این مثال، عملیات بازگشت هیچ کار خاصی انجام نمی دهد. در بخش بعدی فایده ی استفاده ی آن در دستورات شرطی را توضیح خواهیم داد.
متدها و شرط ها
- Microsoft Visual Studio را راه اندازی کنید.
- برای ایجاد برنامه ی جدید، در فهرست گزینه ی اصلی، روی File -> New Project... کلیک کنید.
- در فهرست میانی، روی Empty Project کلیک کنید.
- اسم پروژه را NationalBank5 انتخاب کرده، سپس Enter را بزنید.
- به منظور ایجاد فایل جدید، فهرست اصلی را بازکرده و گزینه ی Project -> Add New Item... را انتخاب کنید.
- Code File را از لیست میانی انتخاب کنید.
- اسم فایل را به Customer تغییر دهید.
- اکنون Add را کلیک کنید.
- فایل Customer.cs را به صورت زیر اصلاح کنید.
public enum AccountType { Checking, Saving, Other }
public class Customer
{
public string AccountNumber;
public AccountType Type;
public string FullName;
public double Balance;
public short PIN;
public Customer(string acnt = "000-000000-000",
AccountType category = AccountType.Other,
string name = "John Doe")
{
AccountNumber = acnt;
Type = category;
FullName = name;
PIN = 0;
Balance = 0.00D;
}
}
- برای ایجاد فایل جدید، در پنجره ی Solution Explorer، راست کلیک کرده سپس : NationalBank5 -> Add -> New Item....
- پس از انتخاب Code File از لیست میانی، اسم مورد نظر را به Management تغییر داده و کلید Enter را بزنید.
- فایل را به ترتیب زیر اصلاح کنید.
using System;
namespace Tahlildadeh.com_CSharpTutorials
{
public class Management
{
private Customer CreateNewAccount()
{
byte typeOfAccount = 0;
Customer client = new Customer();
Console.WriteLine("===========================================");
Console.WriteLine("==-= National Bank =-======================");
Console.WriteLine("-------------------------------------------");
Console.Write("Enter a number for the new account(000-000000-000): ");
client.AccountNumber = Console.ReadLine();
Console.WriteLine("What type of account the customer wants to open");
Console.WriteLine("1 - Checking Account");
Console.WriteLine("2 - Savings Account");
Console.Write("Enter account type: ");
typeOfAccount = byte.Parse(Console.ReadLine());
if (typeOfAccount == 1)
client.Type = AccountType.Checking;
else if (typeOfAccount == 2)
client.Type = AccountType.Saving;
else
client.Type = AccountType.Other;
Console.Write("Enter customer name: ");
client.FullName = Console.ReadLine();
Console.Write("Ask the customer to enter a PIN: ");
client.PIN = short.Parse(Console.ReadLine());
return client;
}
public double GetMoney()
{
double amount = 0;
Console.Write("Amount: ");
amount = double.Parse(Console.ReadLine());
return amount;
}
private void ShowAccountInformation(Customer cust)
{
Console.WriteLine("===========================================");
Console.WriteLine("==-= National Bank =-======================");
Console.WriteLine("Customer Account Information");
Console.WriteLine("-------------------------------------------");
Console.WriteLine("Account #: {0}", cust.AccountNumber);
Console.WriteLine("Account Type: {0}", cust.Type);
Console.WriteLine("Full Name: {0}", cust.FullName);
Console.WriteLine("PIN #: {0}", cust.PIN);
Console.WriteLine("Balance: {0:F}", cust.Balance);
Console.WriteLine("===========================================");
return;
}
public static int Main()
{
double amount = 0;
byte nextAction = 0;
Customer accountHolder = null;
Management registration = new Management();
Console.Title = "National Bank";
accountHolder = registration.CreateNewAccount();
Console.WriteLine("Enter the customer's initial deposit");
accountHolder.Balance = registration.GetMoney();
Console.Clear();
registration.ShowAccountInformation(accountHolder);
do
{
Console.WriteLine("What do you want to do now?");
Console.WriteLine("1 - Check account balance");
Console.WriteLine("2 - Make a deposit");
Console.WriteLine("3 - Withdraw money");
Console.WriteLine("4 - Transfer money from one account to another");
Console.Write("Enter your choice: ");
nextAction = byte.Parse(Console.ReadLine());
Console.Clear();
switch (nextAction)
{
case 1:
Console.Clear();
registration.ShowAccountInformation(accountHolder);
Console.Write("Press Enter for next operation");
Console.ReadKey();
break;
case 2:
Console.Write("Enter Deposit ");
amount = registration.GetMoney();
accountHolder.Balance = accountHolder.Balance + amount;
Console.Clear();
registration.ShowAccountInformation(accountHolder);
break;
case 3:
Console.Write("Enter Withdrawal ");
amount = registration.GetMoney();
if (amount > accountHolder.Balance)
{
Console.WriteLine("You are not allowed to withdraw more money than your account has.");
Console.ReadKey();
}
else
{
accountHolder.Balance = accountHolder.Balance - amount;
}
Console.Clear();
registration.ShowAccountInformation(accountHolder);
break;
case 4:
Console.WriteLine("Operation not available: You have only one account with us");
break;
}
if ((nextAction < 1) || (nextAction > 4))
Console.WriteLine("Invalid Action: Please enter a value between 1 and 4");
} while ((nextAction >= 1) && (nextAction <= 4));
Console.ReadKey();
return 0;
}
}
}
بازگشت شرطی
بعضی از توابع با توجه به پردازشی که روی عملیات شرطی انجام می دهند مقداری را برمی گردانند. به عبارت دیگر، می توان دستور شرطی، مانند if، داخل تابع نوشت و مقداری را از شرط مزبور بازگرداند. توجه خود را به مثال زیر جلب کنید.
using System;
namespace Tahlildadeh.com_CSharpTutorials
{
public class Program
{
enum HouseType { Unknown, SingleFamily, Townhouse, Condominium };
public static int Main()
{
var type = GetHouseType();
switch (type)
{
case HouseType.SingleFamily:
Console.WriteLine("\nType of Home: Single Family");
break;
case HouseType.Townhouse:
Console.WriteLine("\nType of Home: Townhouse");
break;
case HouseType.Condominium:
Console.WriteLine("\nType of Home: Condominium");
break;
case HouseType.Unknown:
Console.WriteLine("\nType of Home. Unknown");
break;
}
return 0;
}
private static HouseType GetHouseType()
{
var type = 0;
Console.WriteLine("What Type of House Would you Like to Purchase?");
Console.WriteLine("1 - Single Family");
Console.WriteLine("2 - Townhouse");
Console.WriteLine("3 - Condominium");
Console.Write("Your Choice? ");
type = int.Parse(Console.ReadLine());
if (type == 1)
return HouseType.SingleFamily;
else if (type == 2)
return HouseType.Townhouse;
else if (type == 3)
return HouseType.Condominium;
}
}
}
متد GetHouseType() مشخص می کند چه زمانی یکی از سه مقدار نام برده برگردانده شده است. در حقیقت این متد می تواند مقداری به جز سه مقدار مذکور دریافت کند، اما در آن صورت (چنانچه کاربر چنین مقداری را وارد کند)، متد جاری نمی داند چه کار باید بکند. به همین دلیل، برنامه ترجمه (compile) نمی شود و در محیط Microsoft Visual C# با error زیر مواجه می شوید.
'Program.GetHouseType()': not all code paths return a value
برای حل این مشکل، باید دستوری ارائه دهید که مقداری غیر از مقدارهای درنظر گرفته را شامل شود. می توان این کار را با نوشتن return نهایی که مقدار خود را دارد انجام داد.
مثال:
using System;
namespace Tahlildadeh.com_CSharpTutorials
{
public class Program
{
enum HouseType { Unknown, SingleFamily, Townhouse, Condominium };
public static int Main()
{
var type = GetHouseType();
switch (type)
{
case HouseType.SingleFamily:
Console.WriteLine("\nType of Home: Single Family");
break;
case HouseType.Townhouse:
Console.WriteLine("\nType of Home: Townhouse");
break;
case HouseType.Condominium:
Console.WriteLine("\nType of Home: Condominium");
break;
case HouseType.Unknown:
Console.WriteLine("\nType of Home. Unknown");
break;
}
return 0;
}
private static HouseType GetHouseType()
{
var type = 0;
Console.WriteLine("What Type of House Would you Like to Purchase?");
Console.WriteLine("1 - Single Family");
Console.WriteLine("2 - Townhouse");
Console.WriteLine("3 - Condominium");
Console.Write("Your Choice? ");
type = int.Parse(Console.ReadLine());
if (type == 1)
return HouseType.SingleFamily;
else if (type == 2)
return HouseType.Townhouse;
else if (type == 3)
return HouseType.Condominium;
else
return HouseType.Unknown;
}
}
}