C# 中使用隱式和顯式操作符的示例
C# 有一個(gè)鮮為人知的特性是通過定義 顯式和隱式操作符 實(shí)現(xiàn)類型之間的轉(zhuǎn)換,這篇文章我們將會(huì)討論如何使用這些 顯式 和 隱式 操作符。
什么是顯式,什么是隱式
隱式類型轉(zhuǎn)換 它是運(yùn)行時(shí)自動(dòng)幫你完成的,言外之意就是你不需要人為干預(yù),比如下面的例子就是典型的 隱式類型轉(zhuǎn)換。
int x = 100; double d = x;
不過下面的代碼則過不了編譯器。
double d = 100.25; int x = d;
編譯程序時(shí),將會(huì)出現(xiàn)下面的錯(cuò)誤。
顯而易見,上面的 double 不能隱式的轉(zhuǎn)成 int,除非顯式轉(zhuǎn)換,那如何顯式呢?可以使用如下代碼。
int x = 100; double d = (int) x;
人工干預(yù)后,編譯器也就放行了。
創(chuàng)建 DTO 類
接下來我們研究一下如何在 用戶自定義類型 上使用 隱式 和 顯式轉(zhuǎn)換,比如:Class,考慮下面的類。
public class Author { public Guid Id { get; set; } public string FirstName { get; set; } public string LastName { get; set; } } public class AuthorDto { public string Id { get; set; } public string FirstName { get; set; } public string LastName { get; set; } }
在上面的代碼中,定義了一個(gè) Author 實(shí)體類,然后再為 Author 定義一個(gè)數(shù)據(jù)傳輸對(duì)象 AuthorDTO,數(shù)據(jù)傳輸對(duì)象是一個(gè)數(shù)據(jù)容器,常用于在 Presentation 和 Application層 之間傳遞數(shù)據(jù)。
Model 和 DTO 之間的相互轉(zhuǎn)換
下面的代碼展示了如何實(shí)現(xiàn) Author 和 AuthorDto 之間的相互轉(zhuǎn)換。
public AuthorDto ConvertAuthorToAuthorDto(Author author) { AuthorDto authorDto = new AuthorDto { Id = author.Id.ToString(), FirstName = author.FirstName, LastName = author.LastName }; return authorDto; } public Author ConvertAuthorDtoToAuthor(AuthorDto authorDto) { Author author = new Author { Id = Guid.Parse(authorDto.Id), FirstName = authorDto.FirstName, LastName = authorDto.LastName }; return author; }
如果需要在應(yīng)用程序中為若干個(gè)類寫這樣的轉(zhuǎn)換代碼,你會(huì)發(fā)現(xiàn)實(shí)現(xiàn)類之間的轉(zhuǎn)換使的代碼比較冗余,而且代碼可讀性也好不到哪里去。所以在這種場(chǎng)景下就是 顯式 和 隱式 操作符的用武之地。
使用隱式操作符
實(shí)現(xiàn) model-dto 之間的轉(zhuǎn)換更簡(jiǎn)單粗暴的方式就是使用 隱顯式操作符,這樣就避免了冗長(zhǎng)的方法調(diào)用,讓代碼更加的直截了當(dāng)。
下面的代碼展示了如何使用 隱式操作符 將 Author實(shí)例 轉(zhuǎn)成 AuthorDto 實(shí)例。
public static implicit operator AuthorDto(Author author) { AuthorDto authorDto = new AuthorDto(); authorDto.Id = author.Id.ToString(); authorDto.FirstName = author.FirstName; authorDto.LastName = author.LastName; return authorDto; }
接下來看一下如何在 Main 方法中使用 隱式操作符。
static void Main(string[] args) { Author author = new Author(); author.Id = Guid.NewGuid(); author.FirstName = "Joydip"; author.LastName = "Kanjilal"; AuthorDto authorDto = author; Console.ReadKey(); }
使用顯式操作符
下面的代碼展示了如何利用 顯式操作符 將 Author 實(shí)例轉(zhuǎn)成 AuthorDto 。
public static explicit operator AuthorDto(Author author) { AuthorDto authorDto = new AuthorDto(); authorDto.Id = author.Id.ToString(); authorDto.FirstName = author.FirstName; authorDto.LastName = author.LastName; return authorDto; }
這時(shí)候在 Main 方法中就需要人工介入進(jìn)行強(qiáng)轉(zhuǎn)了,如下代碼所示:
static void Main(string[] args) { Author author = new Author(); author.Id = Guid.NewGuid(); author.FirstName = "Joydip"; author.LastName = "Kanjilal"; AuthorDto authorDto = (AuthorDto)author; Console.ReadKey(); }
值得注意的是,你不能在一個(gè)類中的對(duì)象轉(zhuǎn)換同時(shí)定義 顯式 和 隱式操作符,如下圖所示:
如果你定義了隱式操作符,那么對(duì)象之間的轉(zhuǎn)換可以是隱式或顯式,如果你定義了顯式操作符,那么你只能顯式的實(shí)現(xiàn)對(duì)象轉(zhuǎn)換,雖然隱式操作使用起來非常方便,但顯式操作會(huì)讓代碼意圖更明顯,可讀性更高。
以上就是C# 中使用隱式和顯式操作符的示例的詳細(xì)內(nèi)容,更多關(guān)于C# 中使用隱式和顯式操作符的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Unity報(bào)錯(cuò)InvalidOperationException: out of sync的解決
今天在做個(gè)東西,發(fā)現(xiàn)報(bào)錯(cuò),特此來記錄一下,本文介紹了Unity報(bào)錯(cuò)InvalidOperationException: out of sync的解決,感興趣的可以了解一下2021-05-05C++聯(lián)合體轉(zhuǎn)換成C#結(jié)構(gòu)的實(shí)現(xiàn)方法
這篇文章主要介紹了C++聯(lián)合體轉(zhuǎn)換成C#結(jié)構(gòu)的實(shí)現(xiàn)方法,需要的朋友可以參考下2014-08-08C#?使用SpecFlow創(chuàng)建BDD測(cè)試用例的示例代碼
這篇文章主要介紹了C#?使用SpecFlow創(chuàng)建BDD測(cè)試用例,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-06-06C#窗體-數(shù)據(jù)庫(kù)連接及登錄功能的實(shí)現(xiàn)案例
這篇文章主要介紹了C#窗體-數(shù)據(jù)庫(kù)連接及登錄功能的實(shí)現(xiàn)案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-12-12