亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C# 中使用隱式和顯式操作符的示例

 更新時間:2021年04月02日 11:53:13   作者:碼農讀書  
這篇文章主要介紹了C# 中使用隱式和顯式操作符的示例,幫助大家更好的理解和學習使用c#,感興趣的朋友可以了解下

C# 有一個鮮為人知的特性是通過定義 顯式和隱式操作符 實現類型之間的轉換,這篇文章我們將會討論如何使用這些 顯式 和 隱式 操作符。

什么是顯式,什么是隱式

隱式類型轉換 它是運行時自動幫你完成的,言外之意就是你不需要人為干預,比如下面的例子就是典型的 隱式類型轉換。

int x = 100; 
double d = x;

不過下面的代碼則過不了編譯器。

double d = 100.25;
int x = d;

編譯程序時,將會出現下面的錯誤。

顯而易見,上面的 double 不能隱式的轉成 int,除非顯式轉換,那如何顯式呢?可以使用如下代碼。

int x = 100; 
double d = (int) x;

人工干預后,編譯器也就放行了。

創(chuàng)建 DTO 類

接下來我們研究一下如何在 用戶自定義類型 上使用 隱式 和 顯式轉換,比如: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; }
    }

在上面的代碼中,定義了一個 Author 實體類,然后再為 Author 定義一個數據傳輸對象 AuthorDTO,數據傳輸對象是一個數據容器,常用于在 Presentation 和 Application層 之間傳遞數據。

Model 和 DTO 之間的相互轉換

下面的代碼展示了如何實現 Author 和 AuthorDto 之間的相互轉換。

        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;
        }

如果需要在應用程序中為若干個類寫這樣的轉換代碼,你會發(fā)現實現類之間的轉換使的代碼比較冗余,而且代碼可讀性也好不到哪里去。所以在這種場景下就是 顯式 和 隱式 操作符的用武之地。

使用隱式操作符

實現 model-dto 之間的轉換更簡單粗暴的方式就是使用 隱顯式操作符,這樣就避免了冗長的方法調用,讓代碼更加的直截了當。

下面的代碼展示了如何使用 隱式操作符 將 Author實例 轉成 AuthorDto 實例。

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 實例轉成 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;
}

這時候在 Main 方法中就需要人工介入進行強轉了,如下代碼所示:

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();
}

值得注意的是,你不能在一個類中的對象轉換同時定義 顯式 和 隱式操作符,如下圖所示:

如果你定義了隱式操作符,那么對象之間的轉換可以是隱式或顯式,如果你定義了顯式操作符,那么你只能顯式的實現對象轉換,雖然隱式操作使用起來非常方便,但顯式操作會讓代碼意圖更明顯,可讀性更高。

以上就是C# 中使用隱式和顯式操作符的示例的詳細內容,更多關于C# 中使用隱式和顯式操作符的資料請關注腳本之家其它相關文章!

相關文章

  • C#遞歸讀取XML菜單數據的方法

    C#遞歸讀取XML菜單數據的方法

    這篇文章主要介紹了C#遞歸讀取XML菜單數據的方法,涉及遞歸的操作技巧與C#窗體的用法,對于進行C#項目開發(fā)具有一定的參考借鑒價值,需要的朋友可以參考下
    2014-12-12
  • C#實現XML序列化與反序列化

    C#實現XML序列化與反序列化

    這篇文章介紹了C#實現XML序列化與反序列化的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • Unity報錯InvalidOperationException: out of sync的解決

    Unity報錯InvalidOperationException: out of sync的解決

    今天在做個東西,發(fā)現報錯,特此來記錄一下,本文介紹了Unity報錯InvalidOperationException: out of sync的解決,感興趣的可以了解一下
    2021-05-05
  • C++聯(lián)合體轉換成C#結構的實現方法

    C++聯(lián)合體轉換成C#結構的實現方法

    這篇文章主要介紹了C++聯(lián)合體轉換成C#結構的實現方法,需要的朋友可以參考下
    2014-08-08
  • C#?使用SpecFlow創(chuàng)建BDD測試用例的示例代碼

    C#?使用SpecFlow創(chuàng)建BDD測試用例的示例代碼

    這篇文章主要介紹了C#?使用SpecFlow創(chuàng)建BDD測試用例,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • C#中的多線程多參數傳遞詳解

    C#中的多線程多參數傳遞詳解

    第一種解決方案的原理是:將線程執(zhí)行的方法和參數都封裝到一個類里面。通過實例化該類,方法就可以調用屬性來實現間接的類型安全地傳遞多個參數
    2014-01-01
  • C#預處理器指令詳解與示例

    C#預處理器指令詳解與示例

    在軟件開發(fā)中,我們常常需要編寫可移植和可配置的代碼,C#?預處理器指令為我們提供了這樣的能力,在本篇文章中,我們將詳細介紹C#預處理器指令的定義、語法格式、功能以及在實際編程中的應用,需要的朋友可以參考下
    2024-04-04
  • C#委托與事件初探

    C#委托與事件初探

    事件是委托的一種特殊形式,當發(fā)生有意義的事情時,事件處理對象通知過程。接下來通過本文給大家介紹C#委托與事件初探,感興趣的朋友一起學習吧
    2016-02-02
  • C#中string.format用法詳解

    C#中string.format用法詳解

    這篇文章主要介紹了C#中string.format用法,以實例形式較為詳細的講述了string.format格式化的各種用法,非常具有實用價值,需要的朋友可以參考下
    2014-11-11
  • C#窗體-數據庫連接及登錄功能的實現案例

    C#窗體-數據庫連接及登錄功能的實現案例

    這篇文章主要介紹了C#窗體-數據庫連接及登錄功能的實現案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12

最新評論