程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 解析C#面向對象編程中辦法(method)的應用

解析C#面向對象編程中辦法(method)的應用

編輯:C#入門知識

解析C#面向對象編程中辦法(method)的應用。本站提示廣大學習愛好者:(解析C#面向對象編程中辦法(method)的應用)文章只能為提供參考,不一定能成為您想要的結果。以下是解析C#面向對象編程中辦法(method)的應用正文


辦法是包括一系列語句的代碼塊。法式經由過程挪用該辦法並指定任何所需的辦法參數使語句得以履行。在 C# 中,每一個履行的指令均在辦法的高低文中履行。Main 辦法是每一個 C# 運用法式的進口點,並在啟動法式時由公共說話運轉時 (CLR) 挪用。
辦法簽名
經由過程指定拜訪級別(如 public 或 private)、可選潤飾符(如 abstract 或 sealed)、前往值、辦法的稱號和任何辦法參數,在類或構造中聲明辦法。這些部件一路組成辦法的簽名。
留意
出於辦法重載的目標,辦法的前往類型不是辦法簽名的一部門。然則在肯定拜托和它所指向的辦法之間的兼容性時,它是辦法簽名的一部門。
辦法參數在括號內,而且用逗號分隔。空括號指導辦法不須要任何參數。此類包括三種辦法:

abstract class Motorcycle
{
 // Anyone can call this.
 public void StartEngine() {/* Method statements here */ }

 // Only derived classes can call this.
 protected void AddGas(int gallons) { /* Method statements here */ }

 // Derived classes can override the base class implementation.
 public virtual int Drive(int miles, int speed) { /* Method statements here */ return 1; }

 // Derived classes must implement this.
 public abstract double GetTopSpeed(); 
}

辦法拜訪
挪用對象上的辦法就像拜訪字段。在對象名以後添加一個句點、辦法名和括號。參數列在括號裡,而且用逗號分隔。是以,可在以下示例中挪用 Motorcycle 類的辦法:

class TestMotorcycle : Motorcycle
{

 public override double GetTopSpeed()
 {
  return 108.4;
 }

 static void Main()
 {

  TestMotorcycle moto = new TestMotorcycle();

  moto.StartEngine();
  moto.AddGas(15);
  moto.Drive(5, 20);
  double speed = moto.GetTopSpeed();
  Console.WriteLine("My top speed is {0}", speed);   
 }
}

辦法參數與參數
該辦法界說指定任何所需參數的稱號和類型。挪用代碼挪用該辦法時,它為每一個參數供給了稱為參數的詳細值。參數必需與參數類型兼容,但挪用代碼中應用的參數名(假如有)不須要與辦法中界說的參數名雷同。例如:

public void Caller()
{
 int numA = 4;
 // Call with an int variable.
 int productA = Square(numA);

 int numB = 32;
 // Call with another int variable.
 int productB = Square(numB);

 // Call with an integer literal.
 int productC = Square(12);

 // Call with an expression that evaulates to int.
 productC = Square(productA * 3);
}

int Square(int i)
{
 // Store input argument in a local variable.
 int input = i;
 return input * input;
}

按援用傳遞與按值傳遞
默許情形下,值類型傳遞給辦法時,傳遞的是正本而不是對象自己。是以,對參數的更改不會影響挪用辦法中的原始正本。可使用 ref 症結字按援用傳遞值類型。
援用類型的對象傳遞到辦法中時,將傳遞對對象的援用。也就是說,該辦法吸收的不是對象自己,而是指導該對象地位的參數。假如經由過程應用此援用更改對象的成員,即便是按值傳遞該對象,此更改也會反應在挪用辦法的參數中。
經由過程應用 class 症結字創立援用類型,如以下示例所示。

public class SampleRefType
{
 public int value;
}

如今,假如將基於此類型的對象傳遞到辦法,則將傳遞對對象的援用。上面的示例將 SampleRefType 類型的對象傳遞到 ModifyObject 辦法。

public static void TestRefType()
{
 SampleRefType rt = new SampleRefType();
 rt.value = 44;
 ModifyObject(rt);
 Console.WriteLine(rt.value);
}
static void ModifyObject(SampleRefType obj)
{
 obj.value = 33;
}

該示例履行的內容本質上與先前示例雷同,均按值將參數傳遞到辦法。然則由於應用了援用類型,成果有所分歧。 ModifyObject 中所做的對形參 obj 的 value 字段的修正,也會更改 TestRefType 辦法中實參 rt 的 value 字段。 TestRefType 辦法顯示 33 作為輸入。

前往值
辦法可以將值前往到挪用方。假如列在辦法名之前的前往類型不是 void,則該辦法可經由過程應用 return 症結字前往值。帶 return 症結字,後跟與前往類型婚配的值的語句將該值前往到辦法挪用方。 return 症結字還會停滯履行該辦法。假如前往類型為 void,沒有值的 return 語句仍可用於停滯履行該辦法。沒有 return 症結字,當辦法達到代碼塊開頭時,將停滯履行。具有非空的前往類型的辦法都須要應用 return 症結字來前往值。例如,這兩種辦法都應用 return 症結字來前往整數:

class SimpleMath
{
 public int AddTwoNumbers(int number1, int number2)
 {
  return number1 + number2;
 }

 public int SquareANumber(int number)
 {
  return number * number;
 }
}

若要應用從辦法前往的值,挪用辦法可以在雷同類型的值足夠的處所應用該辦法挪用自己。也能夠將前往值分派給變量。例如,以下兩個代碼示例完成了雷同的目的:

(1)

 int result = obj.AddTwoNumbers(1, 2);
result = obj.SquareANumber(result);
// The result is 9.
Console.WriteLine(result);
(2)

result = obj.SquareANumber(obj.AddTwoNumbers(1, 2));
// The result is 9.
Console.WriteLine(result);

在這類情形下,應用當地變量 result 存儲值是可選的。此步調可以贊助進步代碼的可讀性,或許假如須要存儲該辦法全部規模內參數的原始值,則此步調能夠很有需要。

異步辦法
經由過程應用異步功效,你可以挪用異步辦法而無需應用顯式回調,也不須要跨多個辦法或 lambda 表達式來手動拆分代碼。Visual Studio 2012 中已引入異步功效。
假如用 async 潤飾符標志辦法,則可使用該辦法中的 await 運算符。當控件達到異步辦法中的 await 表達式時,控件將前往到挪用方,並在期待義務完成前,辦法中進度將一向處於掛起狀況。義務完成後,可以在辦法中恢復履行。
留意
異步辦法在碰到第一個還沒有完成的 awaited 對象或達到異步辦法的末尾時(以先產生者為准),將前往到挪用方。
異步辦法可以具有 Task<TResult>、Task 或 void 前往類型。Void 前往類型重要用於界說須要 void 前往類型的事宜處置法式。沒法期待前往 void 的異步辦法,而且前往 void 辦法的挪用方沒法捕捉該辦法激發的異常。
在以下示例中,DelayAsync 是具有 Task<TResult> 前往類型的異步辦法。 DelayAsync 具有前往整數的 return 語句。是以,DelayAsync 的辦法聲明必需具有 Task<int> 的前往類型。由於前往類型是 Task<int>,DoSomethingAsync 中 await 表達式的盤算如以下語句所示得出整數:

int result = await delayTask


startButton_Click 辦法是具有 void 前往類型的異步辦法的示例。由於 DoSomethingAsync 是異步辦法,挪用 DoSomethingAsync 的義務必需期待,如以下語句所示:await DoSomethingAsync();。 startButton_Click 辦法必需應用 async 潤飾符停止界說,由於該辦法具有 await 表達式。

// using System.Diagnostics;
// using System.Threading.Tasks;

// This Click event is marked with the async modifier.
private async void startButton_Click(object sender, RoutedEventArgs e)
{
 await DoSomethingAsync();
}

private async Task DoSomethingAsync()
{
 Task<int> delayTask = DelayAsync();
 int result = await delayTask;

 // The previous two statements may be combined into
 // the following statement.
 //int result = await DelayAsync();

 Debug.WriteLine("Result: " + result);
}

private async Task<int> DelayAsync()
{
 await Task.Delay(100);
 return 5;
}

輸入: 

 

Result: 5

異步辦法不克不及聲明任何 ref 或 out 參數,然則可以挪用具有這類參數的辦法。


表達式主體界說
具有立刻僅前往表達式成果,或單個語句作為辦法主題的辦法界說很罕見。以下是應用 => 界說此類辦法的語法快捷方法:

public Point Move(int dx, int dy) => new Point(x + dx, y + dy); 
public void Print() => Console.WriteLine(First + " " + Last);
// Works with operators, properties, and indexers too.
public static Complex operator +(Complex a, Complex b) => a.Add(b);
public string Name => First + " " + Last; 
public Customer this[long id] => store.LookupCustomer(id);

假如該辦法前往 void 或是異步辦法,則該辦法的主體必需是語句表達式(與 lambda 雷同)。關於屬性和索引器,二者必需是只讀,而且不應用 get 拜訪器症結字。
迭代器
迭代器對聚集履行自界說迭代,如列表或數組。迭代器應用 yield return 語句前往元素,每次前往一個。當 yield return 語句達到時,將記住以後在代碼中的地位。下次挪用迭代器時,將從該地位從新開端履行。
經由過程應用 foreach 語句從客戶端代碼挪用迭代器。
迭代器的前往類型可所以 IEnumerable、IEnumerable<T>、IEnumerator 或 IEnumerator<T>。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved