1. 程式人生 > >拓展方法的定義及呼叫和微軟拼音元件的使用

拓展方法的定義及呼叫和微軟拼音元件的使用

我們在做拼音查詢的時候可能會用到微軟的拼音元件,我用到這個時候想到正好可以使用拓展方法,拓展給string。來和大家一起學習交流。

微軟的拼音元件包裡面有七個工具,我們用的是這個CHSPinYinConv.msi,雙擊安裝,安裝目錄會產生一個dll,我們在工程裡面新增引用就好,拓展方法的定義和使用在註釋裡面。下面看程式碼:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.International.Converters.PinYinConverter;//引入拼音元件空間

namespace pin_yinConvert
{
    public static class ExpansionMethod
    {
        //拓展方法必須在一個非巢狀、非泛型的靜態類中,且一定是靜態方法
        //拓展方法至少要有一個引數
        //拓展方法第一個引數必須加上this關鍵字作為字首
        //拓展方法第一個引數型別也稱為擴充套件型別(extended type),表示該方法對這個型別進行擴充套件
        //拓展方法第一個引數不能用this以外的修飾符(比如out或ref)
        //拓展方法第一個引數不能是指標型別

        /// <summary>
        /// string 的拓展方法,用於獲取字串中漢字的拼音
        /// </summary>
        /// <param name="chinese"></param>
        public static string getAllPinYin(this string chinese)
        {
            var py = "";
            foreach (char c in chinese)
            {
                if (c >= 0x4e00 && c <= 0x9fbb)//UNICODE 中 漢子的範圍是:0x4e00 - 0x9fbb,以此來判斷是否是中文
                {
                    ChineseChar chc = new ChineseChar(c);
                    //Pinyins 返回的是一個只讀陣列,如果是多音字,那麼數組裡面會有多個元素。每一個元素的格式是拼音加1到5的某一個數字,代表聲調,5代表輕音,如:中-- ZHONG1/ZHONG4。
                    py += chc.Pinyins[0].Substring(0, chc.Pinyins[0].Length - 1) + " ";
                }
                else
                {
                    py += c + " ";
                }
            }

            return " '" + chinese + "' 的拼音是: " + py;
            //Console.WriteLine();
        }

        /// <summary>
        /// string 的拓展方法,用於獲取漢字的首字母
        /// </summary>
        /// <param name="chinese"></param>
        /// <returns></returns>
        public static string getFirstPinYin(this string chinese)
        {
            var py = "";
            foreach (char c in chinese)
            {
                if (c >= 0x4e00 && c <= 0x9fbb)
                {
                    ChineseChar chc = new ChineseChar(c);
                    py += chc.Pinyins[0][0];
                }
                else
                {
                    return ""; //存在非漢字字元,直接結束
                }
            }
            return py;
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            //拓展方法的使用:

            //1、用拓展型別string,直接呼叫拓展方法。
            string chinese = "我是懷夢逆行";       
            Console.WriteLine(chinese.getAllPinYin());
            Console.WriteLine(chinese.getFirstPinYin());

            //2、用拓展方法所在的類(ExpansionMethod),呼叫
            Console.WriteLine(ExpansionMethod.getAllPinYin("我是懷夢逆行"));
            Console.WriteLine(ExpansionMethod.getFirstPinYin("我是懷夢逆行")); 
        }

        //PS:判斷一個方法是拓展方法還是原生方法,vs中,滑鼠懸停在上面會看到拓展方法有(extension) 修飾
    }
}


相關推薦

拓展方法定義呼叫微軟拼音元件的使用

我們在做拼音查詢的時候可能會用到微軟的拼音元件,我用到這個時候想到正好可以使用拓展方法,拓展給string。來和大家一起學習交流。 微軟的拼音元件包裡面有七個工具,我們用的是這個CHSPinYinConv.msi,雙擊安裝,安裝目錄會產生一個dll,我們在工程裡面新增引用就

C++初學例程5---類的定義類中方法定義呼叫

 void Set_weight(int w);//這裡只是對函式的宣告 還沒有實際的定義        //方法的首字母也大寫  //如何在 類的外部定義類中的方法  void Get_height()  {   cout<<"height = "<<height<<"

python 函式的定義呼叫語法,map 方法

1.什麼是函式    開發程式時候,需要程式碼執行多次,為了提高編寫效率及程式碼重用性,所以把具有獨立功能的程式碼塊組織為一個小模組,給這個功能一個名稱,這就是函式。    函式可以使用系統自帶的函式也可以自定義函式   &nbs

Nsis 巨集定義呼叫方法

2014年10月22日 14:37:40 xiliang_pan 閱讀數:1769 個人分類: Nsis

Shell之function函式的定義呼叫

文章目錄 `function`函式的定義及呼叫 `function`函式的定義 `function`函式的呼叫【位置傳參】 函式使用return返回值【位置傳參】 函式的呼叫【陣列傳參】

Python中類方法定義常用的實現方式

1. python類的屬性和方法檢視 class Person_1: mind = '有思想' belif = '有信仰' animal = '高階動物' def tt(): pass print(Person_1.__dict_

layui.laytpl中js方法書寫呼叫:去除html標籤

1 <script type="text/html" id="conTpl"> 2   3 {{# 4 var delhtml = function(str) { 5 return str.replace(/&lt

Python 函式定義呼叫(1)

1、函式的功能: (1)程式碼的一種組織形式; (2)一個函式一般完成一項特定的功能。 2、函式使用 (1)函式需要先定義 (2)使用函式,俗稱呼叫 3、函式定義的一般規則 (1)def 關鍵字,後跟一個空格; (2)函式名,自己定義,起名需要遵循

Python 函式定義呼叫(2)——引數詳解

目錄 一、函式的引數和返回值 (1)引數: 負責給函式傳遞一些必要的資料或者資訊 形參(形式引數): 在函式定義的時候用到的引數沒有具體值,只是一個佔位的符號,成為形參; 實參(實際引數): 在呼叫函式的時候輸入的值。 (2)返回值: 函式

Python 語言學習 第七篇:函式1(定義呼叫變數的作用域)

函式是把一些語句集合在一起的程式結構,用於把複雜的流程細分成不同的元件,能夠減少程式碼的冗餘、程式碼的複用和修改程式碼的代價。 函式可以0個、1個或多個引數,向函式傳遞引數,可以控制函式的流程。函式還可以返回程式碼執行的結果,從技術上講,任何函式都要返回結果,一個沒有返回值的函式會自動返回none物件。如果

thinkphp5.0的controller、medol層的定義呼叫的實現例項

1、model層的設計的實現 <?php namespace app\index\model; use think\Model; use think\Db; class Member extends Model {    protected $table='hfs_

Java泛型方法定義方法前加詳解

首先要說明<T>代表泛型,但不止T還有A、B、K、V等都是用到了java的泛型中,如果是容器類可以使用E,若鍵值匹配可以用K(Key)和V(Value)等,若是<?>,則是預設是

函式定義呼叫

函式是由事件驅動的或者當它被呼叫時執行的可重複使用的程式碼塊。常見函式:        function 函式名(形參){          

Toast拓展--自定義顯示時間動畫

Toast拓展–自定義顯示時間和動畫 我們在Android應用開發中經常會需要在介面上彈出一個對介面操作無影響的小提示框來提示使用者一些資訊,這時候一般都會使用Android原生的Toast類 Toast.makeText(mContext, "訊息

array.xml的定義呼叫

在values中定義一個array.xml檔案:<?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="mydata"> &l

makefile專題:函式定義呼叫

關鍵詞:makefile中的函式、自定義函式、預定義函式 1. makefile中的函式 make直譯器提供了一系列的函式供 makefile呼叫(即預定義函式,相當於庫函式) 在makefi

方法定義格式

 簡單的說:方法就是完成特定功能的程式碼塊     在很多語言裡面都有函式的定義 函式在Java中被稱為方法 格式:   修飾符 返回值型別 方法名(引數型別 引數名1,引數型別 引數名2…) { 函式體; return 返回值; } 方法格式的解釋說明  修飾符

js內部函式的定義呼叫

內部函式:定義在另一個函式中的函式 例如: 1 2 3 4 5 6 7 <script> functionouter(){ functioninner(){

Swift中自定義類==比較方法未被呼叫的分析解決

在專案中自定義了2個類:A和B,其中A含有B的例項變數. 在這2個類中都定義了==比較方法,按照正常來說:比較A,必然比較B.因為需要比較A中型別為B的例項變數. 但實際執行中發現,兩個字面上完全一樣的A例項物件,比較竟然不相等!!! 在A的==方法中下斷點,發

Kotlin相關基礎與Java的不同 的 筆記(仨) --拓展方法屬性代理

感覺學習進度越來越慢了,一個新的知識點需要學習好久. 22. Kotlin的擴充套件方法和擴充套件屬性 可以自定義方法和運算子啊 可以理解為 加強版的Utils 只需要遵循 fun X.Y():Z{} X為類名 Y為自定義的擴充套件方