银河

SKYIV STUDIO

  博客园 :: 首页 :: 博问 :: 闪存 :: :: :: 订阅 订阅 :: 管理 ::
  268 随笔 :: 2 文章 :: 2616 评论 :: 140万 阅读
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
    在上篇文章“使用 C# 开发智能手机软件:推箱子(一)”中,我对推箱子程序作了总体介绍。这次,我先介绍 Common/Fcl.cs 源程序文件。
 1 using System;
 2 using System.IO;
 3 using System.Drawing;
 4 
 5 namespace Skyiv.Ben.PushBox.Common
 6 {
 7   /// <summary>
 8   /// 这里是 .NET Framework 支持,而 .NET Compact Framework 不支持的东东
 9   /// </summary>
10   static class Fcl
11   {
12     /// <summary>
13     /// 获取为此环境定义的换行字符串。-- Environment
14     /// </summary>
15     public static string NewLine { get { return "\r\n";  } }
16 
17     /// <summary>
18     /// 打开一个文本文件,将文件的所有行读入一个字符串,然后关闭该文件。-- File
19     /// </summary>
20     /// <param name="path">要打开以进行读取的文件</param>
21     /// <returns>包含文件所有行的字符串</returns>
22     public static string ReadAllText(string path)
23     {
24       string text = "";
25       if (File.Exists(path))
26       {
27         using (StreamReader sr = new StreamReader(path, Pub.Encode))
28         {
29           text = sr.ReadToEnd();
30         }
31       }
32       return text;
33     }
34 
35     /// <summary>
36     /// 创建一个新文件,在其中写入指定的字符串,然后关闭该文件。-- File
37     /// </summary>
38     /// <param name="path">要写入的文件</param>
39     /// <param name="contents">要写入文件的字符串</param>
40     public static void WriteAllText(string path, string contents)
41     {
42       using (StreamWriter sw = new StreamWriter(path, false, Pub.Encode))
43       {
44         sw.Write(contents);
45       }
46     }
47 
48     /// <summary>
49     /// 将指定的 Size 添加到指定的 Point。-- Point
50     /// </summary>
51     /// <param name="point">要添加的 Point</param>
52     /// <param name="size">要添加的 Size</param>
53     /// <returns>加法运算的结果</returns>
54     public static Point Add(Point point, Size size)
55     {
56       return new Point(point.X + size.Width, point.Y + size.Height);
57     }
58 
59     /// <summary>
60     /// 将一维数组的大小更改为指定的新大小。-- Array
61     /// </summary>
62     /// <typeparam name="T">数组元素的类型</typeparam>
63     /// <param name="array">要调整大小的一维数组</param>
64     /// <param name="newSize">新数组的大小</param>
65     public static void Resize<T>(ref T[] array, int newSize)
66     {
67       if (array != null && array.Length == newSize) return;
68       if (array == null) array = new T[0];
69       T[] newArray = new T[newSize];
70       Array.Copy(array, newArray, Math.Min(array.Length, newArray.Length));
71       array = newArray;
72     }
73   }
74 }
75 
    俗话说,工欲善其事,必先利其器。我们知道,Microsoft .NET Compact Framework 只是 Microsoft .NET Framework 的一个子集,她省略了一些不常用的功能。但是,如果我们恰好需要这些功能,只好自己重新实现一下了。这个 Fcl 静态类就是起这个作用的。源程序代码的注释已经写得很清楚了。
    Fcl.NewLine 我原本是想写成这样的:
  static class Fcl
  {
    
static static string newLine;
    
    
/// <summary>
    
/// 获取为此环境定义的换行字符串。-- Environment
    
/// </summary>
    public static string NewLine
    {
      
get
      {
        
if (newLine == null)
        {
          newLine 
= (Environment.OSVersion.Platform != PlatformID.Unix) ? "\r\n" : "\n";
        }
        
return newLine;
      }
    }
  }
    可惜的是,这段代码无法在 .NET Compact Framework 下通过编译(如果是 .NET Framework 则没有问题)。原因是 PlatformID 枚举的成员:
Unix         操作系统为 Unix。
Win32NT      操作系统为 Windows NT 或较新的版本。
Win32S       操作系统为 Win32s(Win32 子集)类型。
Win32Windows 操作系统为 Windows 
95 或较新的版本。
WinCE        操作系统为 Windows CE。
    PlatformID.Unix 并不被 .NET CF 所支持。这实在是一件很奇怪的事,既然 .NET CF 都支持 PlatformID 的 Win32NT、Win32S、Win32Windows、WinCE 成员,为什么就不能支持 Unix 成员呢?这样,这个程序将来要移植到 Linux 操作系统时就有些小麻烦了。
    要知道,这在主窗体的代码中用以下一段代码来实现在智能手机上禁用“前端显示”功能。
  public partial class MainForm : Form
  {
    
protected override void OnLoad(EventArgs e)
    {
      
base.OnLoad(e);
      miTopMost.Enabled 
= (Environment.OSVersion.Platform != PlatformID.WinCE);
      env.LoadConfig();
      env.LoadGroup();
      LoadLevel(
true);
      
if (env.IsSave) Restore(env.Steps);
    }

上一篇:使用 C# 开发智能手机软件:推箱子(一)
下一篇:使用 C# 开发智能手机软件:推箱子(三)
返回目录
posted on   银河  阅读(6525)  评论(9编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示