آشنایی با Implicit Casting و Explicit Casting
پنجشنبه 23 خرداد 1392آشنایی با Implicit Casting و Explicit Casting <br/> همه ما به نحوی در پروژههای خود مجبور به تبدیل انوع داده شده ایم و یک نوع از داده یا Object رو به نوع دیگری از داده یا Object تبدیل کرده ایم. در این پست دو روش دیگر برای تبدیل انواع دادهها بررسی میکنیم.
همه ما به نحوی در پروژههای خود مجبور به تبدیل انوع داده شده ایم و یک نوع از داده یا Object رو به نوع دیگری از داده یا Object تبدیل کرده ایم. در این پست دو روش دیگر برای تبدیل انواع دادهها بررسی میکنیم. برای شروع دو کلاس زیر رو در نظر بگیرید.
#1کلاس Book
#2کلاس NoteBook
این دو کلاس هیچ ارتباطی با هم ندارند در نتیجه امکان تبدیل این دو نوع وجود ندارد یعنی اجرای هر دو دستور زیر باعث ایجاد خطای کامپایلری میشود.
برای حل این مشکل و تبدیل این دو نوع از Objectها میتونیم از دو نوع ImplicitCasting و Explicit Casting استفاده کنیم.
#Explicit Casting
در Explicit یک Operator به صورت Explicit تعریف میکنیم که ورودی اون از نوع خود کلاس book و خروجی اون از نوع مورد دلخواه است. Converter مورد نظر رو در بدنه این Operator مینویسیم. حالا به راحتی دستور زیر کامپایل میشود.
تنها تفاوت این روش با روش قبلی، در نوع تعریف operator است. بعد از تعریف نوع استفاده به صورت زیر خواهد بود.
در این روش نیاز به ذکر نوع Object برای Cast نیست و Object مورد نظر به راحتی به نوع داده قبل از اپراتور = تبدیل میشود.
#1کلاس Book
public class Book { public int Code { get; set; } public string Title { get; set; } public string Category { get; set; } }
public class NoteBook { public int Code { get; set; } public string Title { get; set; } }
static void Main( string[] args ) { Book book = new Book() { Code = 1, Title = "Book1", Category = "Default" }; NoteBook noteBook = new NoteBook(); noteBook = (NoteBook)book;//Compile error noteBook = book as NoteBook;//Compile error }
#Explicit Casting
public class Book { public int Code { get; set; } public string Title { get; set; } public string Category { get; set; } public static explicit operator NoteBook( Book book ) { return new NoteBook() { Code = book.Code, Title = book.Title }; } }
static void Main( string[] args ) { Book book = new Book() { Code = 1, Title = "Book1", Category = "Default" }; NoteBook noteBook = new NoteBook(); noteBook = (NoteBook)book;//Correct }
در بالا مشاهده میکنید که حتما باید به طور صریح عملیات Cast رو انجام دهیددر غیر این صورت همچنان خطا خواهید داشت. اما میتوان این مراحل رو هم نادیده گرفت و تبدیل رو به صورت Implicit انجام داد.
#Implicit Casting
public class Book { public int Code { get; set; } public string Title { get; set; } public string Category { get; set; } public static implicit operator NoteBook( Book book ) { return new NoteBook() { Code = book.Code, Title = book.Title }; } }
static void Main( string[] args ) { Book book = new Book() { Code = 1, Title = "Book1", Category = "Default" }; NoteBook noteBook = new NoteBook(); noteBook = book;//Correct }
- C#.net
- 3k بازدید
- 1 تشکر