متغییر خارجی در سی شارپ ۷ (۲۰۱۷)

یک متغیر در زبان سی شارپ مکانی است که با یک نام دلخواه ، مشخص شده و میتواند یک داده نوع خاص را در خود نگه دارد. در این فصل با تعریف و مقدار دهی متغیر ها در زبان سی شارپ آشنا میشویم متغییر خارجی به متغییری گفته می شود که ارسال شود به توابع یا متد های و مقدار تغییر یافته باز گردد .
متغییر خارجی در ورژن های قبلی ابتدا باید تعریف می شد و بعد درکنار کلمه کلیدی out به تایع یا متد های مختلف ارسال می شد و مقدار پالایش شده در متد و توابع را بر می گرداند . مانند مثال زیر

class Program    
{  
  
static void Main(string[] args)    
{    
  string authorName, bookTitle;    
  long publishedYear;    
  GetAuthor(out authorName, out bookTitle, out publishedYear);    
  Console.WriteLine("Author: {0}, Book: {1}, Year: {2}",    
  authorName, bookTitle, publishedYear);    
  Console.ReadKey();    
}  
  
static void GetAuthor(out string name, out string title, out long year)   
{    
  name = "Mahesh Chand";    
  title = "A Programmer's Guide to ADO.NET with C#";    
  year = 2001;    
}  
  
}  

ولی اکنون در سی شارپ ۷ نیاز به تعریف و نوشتن کد اضافی نیست شما می توانید مغییر را در خود متد موقع فراخوانی تعریف نمایید .
ماتند این مثال :

class Program  
{  
  
static void Main(string[] args)  
{  
  AuthorByOutParam(out string authorName, out string bookTitle, out long publishedYear);  
  Console.WriteLine("Author: {0}, Book: {1}, Year: {2}",  
  authorName, bookTitle, publishedYear);  
  Console.ReadKey();  
}  
  
static void AuthorByOutParam(out string name, out string title, out long year)  
{  
  name = "Mahesh Chand";  
  title = "A Programmer's Guide to ADO.NET with C#";  
  year = 2001;  
}  
  
}  
class Program  
{  
  
static void Main(string[] args)  
{  
  AuthorByOutParam(out string authorName, out string bookTitle, out long publishedYear);  
  Console.WriteLine("Author: {0}, Book: {1}, Year: {2}",  
  authorName, bookTitle, publishedYear);  
  Console.ReadKey();  
}  
  
static void AuthorByOutParam(out string name, out string title, out long year)  
{  
  name = "Mahesh Chand";  
  title = "A Programmer's Guide to ADO.NET with C#";  
  year = 2001;  
}  
  
}  

و برای رفرنس یا همان ref درسی شارپ هم همین گونه بود مانند مثال زیر :

class Program    
{  
  
  static void Main(string[] args)   
  {    
    long total = 0;    
    AuthorByRefParam(5, 10, ref total);    
    Console.WriteLine(total);  
    Console.ReadKey();    
  }  
  
  static void AuthorByRefParam(long a, long b, ref long total)    
  {    
    total = a + b;    
  }  
  
}  

ولی اکنون در سی شارپ ۷ به گونه زیر می توان راحتر کد نویسی کرد .

class Program    
{  
  
static void Main(string[] args)    
{  
  
// Create an array of author names   
string[] authors = { "Mahesh Chand", "Mike Gold", "Dave McCarter", "Allen O'neill", "Raj Kumar" };    
  
// Call a method that returns by ref    
ref string author4 = ref new Program().FindAuthor(3, authors);    
Console.WriteLine("Original author:{0}", author4);  
  
// Prints 4th author in array = Allen O'neill    
Console.WriteLine();  
  
// Replace 4th author by new author. By Ref, it will update the array    
author4 = "Chris Sells";  
  
// Print 4th author in array  
  Console.WriteLine("Replaced author:{0}", authors[3]);  
  
//Prints Chris Sells    
Console.ReadKey();  
  
}  
  
public ref string FindAuthor(int number, string[] names)    
{  
  
if (names.Length > 0)    
return ref names[number]; // return the storage location, not the value    
throw new IndexOutOfRangeException($"{nameof(number)} not found.");  
  
}  

شاید این مطالب را هم دوست داشته باشید

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد.