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

C# 開發智慧型手機軟體:推箱子遊戲(二)Common/Fcl.cs 核心輔助類別

     編輯:關於C語言

前言

本系列第二篇,剖析 Common/Fcl.cs,提供 .NET Compact Framework 缺失的 API 相容實作,包括 Environment.NewLine、File.ReadAllText/WriteAllText、Point + Size 運算、Array.Resize 等。

原始碼完整解析


namespace Skyiv.Ben.PushBox.Common
{
    static class Fcl
    {
        // Environment.NewLine 相容
        public static string NewLine => "\r\n";

        // File.ReadAllText 相容
        public static string ReadAllText(string path)
        {
            string text = "";
            if (File.Exists(path))
            {
                using (var sr = new StreamReader(path, Pub.Encode))
                    text = sr.ReadToEnd();
            }
            return text;
        }

        // File.WriteAllText 相容
        public static void WriteAllText(string path, string contents)
        {
            using (var sw = new StreamWriter(path, false, Pub.Encode))
                sw.Write(contents);
        }

        // Point + Size 運算(CF 缺少)
        public static Point Add(Point point, Size size) =>
            new Point(point.X + size.Width, point.Y + size.Height);

        // 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 newArray = new T[newSize];
            Array.Copy(array, newArray, Math.Min(array.Length, newArray.Length));
            array = newArray;
        }
    }
}

設計考量

方法CF 缺失原因實作策略
NewLineCF 無 Environment.NewLine硬編碼 \r\n,Windows 行尾標準
ReadAllText/WriteAllTextCF 無靜態便利方法封裝 StreamReader/Writer,指定編碼 Pub.Encode (GB2312)
Point.AddCF Point 無 + 運算子手工實作座標加法
Array.ResizeCF 2.0 無泛型 Array.Resize手工配置新陣列、複製、交換參考

關鍵細節

  • 編碼一致性:全專案統一使用 Pub.Encode = Encoding.GetEncoding("GB2312"),避免中文亂碼(CF 6.0 不支援 GB18030)。
  • 泛型方法:Resize 展示 CF 2.0 支援泛型方法,雖無 Array.Resize 靜態方法。
  • 靜態類別:static class Fcl 防止實例化,方法皆為純函式,執行緒安全。

結語

Fcl.cs 填補 CF 與完整 Framework API 差距,是跨平台核心庫的基石。下一篇將介紹 Block.cs 定義遊戲基本單元格與狀態編碼。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved