首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

C# 開發智慧型手機推箱子遊戲 (二) - Fcl 靜態類:補足 .NET CF 缺失的 API

     編輯:關於C#

背景:.NET Compact Framework 的缺口

.NET CF 是 .NET Framework 的子集,為了體積精簡,移除了一些「不常用」API。但實務開發常需要這些功能,Common/Fcl.cs 即為**自行實作的補完層**。

完整實作

static class Fcl
{
    // 1. Environment.NewLine → 固定 \r\n (CF 不支援 PlatformID.Unix 判斷)
    public static string NewLine => "\r\n";

    // 2. File.ReadAllText / WriteAllText (CF 無此靜態方法)
    public static string ReadAllText(string path)
    {
        if (!File.Exists(path)) return "";
        using (var sr = new StreamReader(path, Pub.Encode))
            return sr.ReadToEnd();
    }
    public static void WriteAllText(string path, string contents)
    {
        using (var sw = new StreamWriter(path, false, Pub.Encode))
            sw.Write(contents);
    }

    // 3. Point + Size → Point (CF 缺少 Point.op_Addition)
    public static Point Add(Point pt, Size sz) => new Point(pt.X + sz.Width, pt.Y + sz.Height);

    // 4. Array.Resize (CF 2.0 缺少泛型版本)
    public static void Resize(ref T[] array, int newSize)
    {
        if (array != null && array.Length == newSize) return;
        if (array == null) array = new T[0];
        var newArr = new T[newSize];
        Array.Copy(array, newArr, Math.Min(array.Length, newSize));
        array = newArr;
    }
}

設計考量與踩坑記

APICF 狀態替代方案備註
Environment.NewLine有,但 PlatformID.Unix 缺失硬編碼 "\r\n"Windows CE 固定 CRLF,跨平台移植時再處理
File.ReadAllText無StreamReader 手寫注意編碼統一用 Pub.Encode (GB2312)
Point + Size無運算子多載靜態 Add 方法尋路演算法大量使用
Array.ResizeCF 2.0 無泛型版自行實作泛型版CF 3.5 已內建,專案為相容 2.0 保留

實際應用範例

主視窗載入時:依平台決定是否啟用「前端顯示」

protected override void OnLoad(EventArgs e)
{
    base.OnLoad(e);
    // Windows CE 不支援 TopMost,避免遮蔽輸入法等系統 UI
    miTopMost.Enabled = (Environment.OSVersion.Platform != PlatformID.WinCE);
    env.LoadConfig();
    env.LoadGroup();
    LoadLevel(true);
    if (env.IsSave) Restore(env.Steps);
}

此處若直接用 PlatformID.Unix 判斷會編譯失敗,改用 WinCE 判斷是正解。

擴充建議

  • 補足 Path.GetFileNameWithoutExtension、String.IsNullOrEmpty 等 CF 早期版本缺失的方法。
  • 若專案升級目標為 .NET Standard / .NET 6+,可直接移除此類,改用標準 API。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved