متغییر خارجی در سی شارپ ۷ (۲۰۱۷)
یک متغیر در زبان سی شارپ مکانی است که با یک نام دلخواه ، مشخص شده و میتواند یک داده نوع خاص را در خود نگه دارد. در این فصل با تعریف و مقدار دهی متغیر ها در زبان سی شارپ آشنا میشویم متغییر خارجی به متغییری گفته می شود که ارسال شود به توابع یا متد های و مقدار تغییر یافته باز گردد .
متغییر خارجی در ورژن های قبلی ابتدا باید تعریف می شد و بعد درکنار کلمه کلیدی 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."); }
آخرین دیدگاهها