C# 3。0 基本框架

使用TimeZoneInfo:

static void Main()
{
  TimeZoneInfo wa = TimeZoneInfo.FindSystemTimeZoneById
                    ("W. Australia Standard Time");

  Console.WriteLine (wa.Id);                   // W. Australia Standard Time
  Console.WriteLine (wa.DisplayName);          // (GMT+08:00) Perth
  Console.WriteLine (wa.BaseUtcOffset);        // 08:00:00
  Console.WriteLine (wa.SupportsDaylightSavingTime);     // True

  foreach (TimeZoneInfo.AdjustmentRule rule in wa.GetAdjustmentRules())
  {
    Console.WriteLine ("Rule: applies from " + rule.DateStart +
                                      " to " + rule.DateEnd);

    Console.WriteLine ("   Delta: " + rule.DaylightDelta);  

    Console.WriteLine ("   Start: " + FormatTransitionTime
                                     (rule.DaylightTransitionStart, false));

    Console.WriteLine ("   End:   " + FormatTransitionTime
                                     (rule.DaylightTransitionEnd, true));
    Console.WriteLine();
  }
}

static string FormatTransitionTime (TimeZoneInfo.TransitionTime tt,
                                    bool endTime)
{
  if (endTime && tt.IsFixedDateRule
              && tt.Day == 1 && tt.Month == 1
              && tt.TimeOfDay == DateTime.MinValue)
    return "-";

  string s;
  if (tt.IsFixedDateRule)
    s = tt.Day.ToString();
  else
    s = "The " +
        "first second third fourth last".Split() [tt.Week - 1] +
        " " + tt.DayOfWeek + " in";

  return s + " " + DateTimeFormatInfo.CurrentInfo.MonthNames [tt.Month-1]
           + " at " + tt.TimeOfDay.TimeOfDay;
}

DateTime和daylight保存:

DaylightTime changes = TimeZone.CurrentTimeZone.GetDaylightChanges (2008);
TimeSpan halfDelta = new TimeSpan (changes.Delta.Ticks / 2);

DateTime utc1 = changes.End.ToUniversalTime() - halfDelta;
DateTime utc2 = utc1 - changes.Delta;

// Converting these variables to local times demonstrates why you should use
// UTC and not local time if your code relies on time moving forward:

DateTime loc1 = utc1.ToLocalTime();  // (Pacific Standard Time)
DateTime loc2 = utc2.ToLocalTime();
Console.WriteLine (loc1);            // 2/11/2008 1:30:00 AM
Console.WriteLine (loc2);            // 2/11/2008 1:30:00 AM
Console.WriteLine (loc1 == loc2);    // True

Console.Write (loc1.ToString ("o"));  // 2008-11-02T02:30:00.0000000-08:00
Console.Write (loc2.ToString ("o"));  // 2008-11-02T02:30:00.0000000-07:00

Console.WriteLine (loc1.ToUniversalTime() == utc1);   // True
Console.WriteLine (loc2.ToUniversalTime() == utc2);   // True

写一个自定义格式provider:

public class WordyFormatProvider : IFormatProvider, ICustomFormatter
{
  static readonly string[] _numberWords =
   "zero one two three four five six seven eight nine minus point".Split();

  IFormatProvider _parent;   // Allows consumers to chain format providers

  public WordyFormatProvider() : this (CultureInfo.CurrentCulture) { }
  public WordyFormatProvider (IFormatProvider parent)
  {
    _parent = parent;
  }

  public object GetFormat (Type formatType)
  {
    if (formatType == typeof (ICustomFormatter)) return this;
    return null;
  }

  public string Format (string format, object arg, IFormatProvider prov)
  {
    // If it's not our format string, defer to the parent provider:
    if (arg == null || format != "W")
      return string.Format (_parent, "{0:" + format + "}", arg);

    StringBuilder result = new StringBuilder();
    string digitList = string.Format (CultureInfo.InvariantCulture,
                                      "{0}", arg);
    foreach (char digit in digitList)
    {
      int i = "0123456789-.".IndexOf (digit);
      if (i == -1) continue;
      if (result.Length > 0) result.Append (' ');
      result.Append (_numberWords[i]);
    }
    return result.ToString();
  }
}

重载相等语义:

public struct Area : IEquatable <Area>
{
  public readonly int Measure1;
  public readonly int Measure2;

  public Area (int m1, int m2)
  {
    Measure1 = m1;
    Measure2 = m2;
  }

  public override bool Equals (object other)
  {
    if (!(other is Area)) return false;
    return Equals ((Area) other);        // Calls method below
  }

  public bool Equals (Area other)        // Implements IEquatable<Area>
  {
    return Measure1 == other.Measure1 && Measure2 == other.Measure2
        || Measure1 == other.Measure2 && Measure2 == other.Measure1;
  }

  public override int GetHashCode()
  {
    if (Measure1 > Measure2)
      return Measure1 * 37 + Measure2;    // 37 = a prime number
    else
      return Measure2 * 37 + Measure1;
  }

  public static bool operator == (Area a1, Area a2)
  {
     return a1.Equals (a2);
  }

  public static bool operator != (Area a1, Area a2)
  {
    return !a1.Equals (a2);
  }
}

实现IComparable接口:

public struct Note : IComparable<Note>, IEquatable<Note>, IComparable
{
  int _semitonesFromA;

  public Note (int semitonesFromA)
  {
    _semitonesFromA = semitonesFromA;
  }

  public int CompareTo (Note other)            // Generic IComparable<T>
  {
    if (Equals (other)) return 0;              // Fail-safe check
    return _semitonesFromA.CompareTo (other._semitonesFromA);
  }

  int IComparable.CompareTo (object other)     // Nongeneric IComparable
  {
    if (!(other is Note))
      throw new InvalidOperationException ("CompareTo: Not a note");
    return CompareTo ((Note) other);
  }

  public static bool operator < (Note n1, Note n2)
  {
     return n1.CompareTo (n2) < 0;
  }

  public static bool operator > (Note n1, Note n2)
  {
    return n1.CompareTo (n2) > 0;
  }

  public bool Equals (Note other)    // for IEquatable<Note>
  {
    return _semitonesFromA == other._semitonesFromA;
  }

  public override bool Equals (object other)
  {
    if (!(other is Note)) return false;
    return Equals ((Note) other);
  }

  public override int GetHashCode()
  {
    return _semitonesFromA.GetHashCode();
  }

  public static bool operator == (Note n1, Note n2)
  {
     return n1.Equals (n2);
  }

  public static bool operator != (Note n1, Note n2)
  {
     return !(n1 == n2);
  }
}
时间: 2024-09-28 17:21:18

C# 3。0 基本框架的相关文章

Dreamweaver8.0制作框架网站

查看全套"dreamweaver8.0教程" 框架是网页中经常使用的页面设计方式,框架的作用就是把网页在一个浏览器窗口下分割成几个不同的区域,实现在一个浏览器窗口中显示多个HTML页面.使用框架可以非常方便的完成导航工作,让网站的结构更加清晰,而且各个框架之间决不存在干扰问题.利用框架最大的特点就是使网站的风格一致.通常把一个网站中页面相同的部分单独制作成一个页面,作为框架结构的一个子框架的内容给整个网站公用. 一个框架结构有两部分网页文件构成: 框架(Frame):框架是浏览器窗口中

vs2010c#在编程时没有.net+framework+4.0目标框架

问题描述 在新建项目的时候想选择.net+framework+4.0目标框架,可是找不到.net+framework+4.0目标框架求解. 解决方案 解决方案二:你这神奇了--解决方案三:那就安装.NETFramework4.0呗解决方案四:你用的是VS2008的吧?4.0好像要vs2010才支持解决方案五:可能是个比较旧的2010版本,最高只3.5,也没有MVC3.这些都要再单独装.换个2013也就解决了

ssh-Struts2.3.16.1+Hibernate4.3.5+Spring4.0.4 框架整合

问题描述 Struts2.3.16.1+Hibernate4.3.5+Spring4.0.4 框架整合 公司要做项目,要求都用最新的.所以在网上把最新的jar包都下载下来了.可是不知道如何把这些jar包整合到项目中.我现在的做法是按照http://wenku.baidu.com/link?url=EJKhvOXEiRSnj7EVPak-K2AgajBpiSo5MDTuliTZWo66et-XhpGrRkgp18iwBRlipnSYKpFlihV-hurulwNnwyKd4F70BSXcLtcpV

ASP.NET 2.0页面框架简要慨述

ASP.NET Web窗体页面框架组件是一个可缩放的通用语言运行时编程模型,它可以用于动态地生成Web页面.ASP.NET页面框架组件是ASP的合理进化(ASP.NET提供的语法与已有的页面是兼容的),它被特意地设计用于解决早期模型中的大量的关键的缺陷.特别是,它提供了建立和使用可供重复使用的(reusable)UI控件的能力,这些控件可以封装公用的功能,从而减少了页面开发者需要编写的代码数量:它使开发者能够清晰有序地构造页面逻辑(并非"缠绕在一起的代码"):它使用的开发工具提供了强大

HTML 4.0 语法框架标签

 [框架的基本概念] 首先,各位先看看右手边这张图,我将利用这张图来作解说,这样子,讲起来可能会清楚一点. OK!我们可以看见,右边的这个视窗,一共分为 1 . 2 . 3 三个框架,每一个框架,各有其显示的内容分别是a.htm.b.htm.c.htm三个档案.然而左下角的那个 index.htm 是做什么用的呢? 原来,左下角的这个档案 index.htm,就是要告诉电脑,我们要将画面分割成这样,也就是说,所有Frame的标签,其实都只摆在 index.htm 这个档案里.(当然,不是档名一定

Yii2.0高级框架数据库增删改查的一些操作_php实例

yii2.0框架是PHP开发的一个比较高效率的框架,集合了作者的大量心血,下面通过用户为例给大家详解yii2使用中的一些基本的增删改查操作. User::find()->all();    //返回所有用户数据: User::findOne($id);   //返回 主键 id=1  的一条数据: User::find()->where(['name' => 'ttt'])->one();   //返回 ['name' => 'ttt'] 的一条数据: User::find(

ZYSocketSuper 3.0 SOCKET框架组 “北风之神” 发布 连接数单机突破 6W哦??[图]

问题描述 北风之神SOCKET框架组说明:北风之神框架(ZYSOCKETSUPTER)从1.0开始就以超强的性能得到了大家的支持:北风之神主要更新以下内容:1.一个基于SocketAsyncEventArgs的客户端(ZYSocketClientA.dll)ZYSocket.ClientA.SocketClient它支持.net3.0以上版本,还适用于silverlight性能非常优异,代码量小:2.一个数据包缓冲类ZYSocketShare.dll(ZYSocket.share.BuffLis

ASP.NET 2.0页面框架的几处变化

asp.net|页面 新增的页面事件:在ASP.NET 2.0中,一个ASP.NET页面的生命周期主要为(红色字体表示ASP.NET 2.0新增加的阶段页面事件):客户端请求页面->预初始化(OnPreInit)->初始化(OnInit)->完成初始化(OnInitComplete)->载入ViewState(LoadViewState)->处理回送数据(IPostBackDataHandler)->Page_OnPreLoad->Page_OnLoad->

ASP.NET 2.0页面框架的几处变化_XML/RSS

新增的页面事件: 在ASP.NET 2.0中,一个ASP.NET页面的生命周期主要为(红色字体表示ASP.NET 2.0新增加的阶段页面事件):客户端请求页面->预初始化(OnPreInit)->初始化(OnInit)->完成初始化(OnInitComplete)->载入ViewState(LoadViewState)->处理回送数据(IPostBackDataHandler)->Page_OnPreLoad->Page_OnLoad->回发更改通知(Rai