iT邦幫忙

2022 iThome 鐵人賽

DAY 17
0

Hello, 各位 iT 邦幫忙 的粉絲們大家好~~~

在本系列文會利用目前 Visual Studio 內建的專案樣本建立一個初始的 .NET MAUI 專案,並且透過此 .NET MAUI 專案來把 TopStore App 的開發從 Xamairn.Forms 轉換到 .NET MAUI 上進行。

本篇是 Re: 從零改成用 .NET MAUI 技術來繼續過去用 Xamarin 開發的一個 App : TopStore 系列 系列文的 EP17。


稍微來整理一下目前的整個專案的程式碼,也把 TopStoreApp 當中的程式碼都改成 C# 10.0 與 .NET 6.0 所加入的新風格設計: "File Scoped Namespaces""ImplicitUsings"

就以目前的 TopStoreApp 在從 Xamarin.Forms 移轉成 .NET MAUI 的過程當中,從未被異動過的程式碼檔 "IDataService.cs" 來看:
01-1

ImplicitUsings

其中,如果有注意到,上方的 Namespace 都會被 Visual Studio 2022 判定為不用撰寫的 "命名空間":
01-2

在 TopStoreApp 的專案右鍵選單上點選 "編輯專案檔":
01-3

因為在 TopStoreApp 的專案專案檔上,按照微軟定義的 "ImplicitUsings" 寫法:

<Project Sdk="Microsoft.NET.Sdk">

<ImplicitUsings>enable</ImplicitUsings>

01-4

所以,在此 TopStoreApp 專案使用到設計在 "Microsoft.NET.Sdk" 中所規劃設計到的這些 Namespace 們:

using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;

都不需要在專案程式碼當中,去額外撰寫引用 "命名空間" 的敘述,專案會直接自動推斷引用,而如果要關閉推斷引用也可以把專案檔當中的設定改成如下:

<ImplicitUsings>disable</ImplicitUsings>

而如果在所撰寫的程式當中,某個命名空間(以 System.Net.Http 這個命名空間來說),真的都不需要去使用到此命名空間底下的類別設計,但卻又想留著 "推斷引用",也可以保持專案檔的 "推斷引用" 設定是 "enable",然後再額外增加如下設定即可:

<ItemGroup>
  <Using Remove="System.Net.Http" />
</ItemGroup>

因此,這段程式碼將要移除(下圖藍框所示):
01-5

移除後的結果如下:
01-6

File Scoped Namespaces

再來就是會觀察到,從一開始的 .NET 所設計 C# 類別程式碼的設計外面,通常都會再包一個 "命名空間" 的撰寫(下圖紅框所示):
02-1

而如果一個 .cs 檔案當中只有一個命名空間的設計時,那現在在 C# 10.0 之後可以透過 "File Scoped Namespaces" 改成這樣撰寫:
02-2

如果是在 "Visual Studio 2022" 要改成使用 "File Scoped Namespaces" 的話,可以直接在命名空間後面打上 ";",Visual Studio 2022 就會自動幫忙把大括號去除,並且把程式碼的排版排好:
02-3

所以按照這兩點調整完個專案的程式碼。最後,也把之前 EP 的介紹當中因解釋過程而註解掉,那些用不到的程式碼也都移除了。

完成後,也能執行測試看看,所有在 TopStoreApp 已完成的功能都能正常運作沒問題唷!

本 EP 介紹所完成的範例程式碼可在此下載


其他參考資料:


上一篇
EP 16: Adapt CommunityToolkit.Mvvm Nuget Package - III
下一篇
EP 18: Create a Product Class in Models for TopStoreApp
系列文
Re: 從零改用 .NET MAUI 技術來繼續過去用 Xamarin 技術開發的一個 App : TopStore30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言