博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在C#中创建类型
阅读量:4647 次
发布时间:2019-06-09

本文共 11430 字,大约阅读时间需要 38 分钟。

重载构造函数:

using System;public class Wine{  public decimal Price;  public int Year;  public Wine (decimal price) { Price = price; }  public Wine (decimal price, int year) : this (price) { Year = year; }}

对象初始化:

public class Bunny{  public string Name;  public bool LikesCarrots;  public bool LikesHumans;  public Bunny () {}  public Bunny (string n) { Name = n; }}
Bunny b1 = new Bunny { Name="Bo", LikesCarrots=true, LikesHumans=false };Bunny b2 = new Bunny ("Bo")     { LikesCarrots=true, LikesHumans=false };

this引用:

public class Panda{  public Panda Mate;  public void Marry (Panda partner)  {    Mate = partner;    partner.Mate = this;  }}
public class Test{  string name;  public Test (string name) { this.name = name; }}

属性:

public class Stock{  decimal currentPrice;           // The private "backing" field  public decimal CurrentPrice     // The public property  {     get { return currentPrice; } set { currentPrice = value; }  }}

只读和已计算属性:

public class Stock{  string  symbol;  decimal purchasePrice, currentPrice;  long    sharesOwned;  public Stock (string symbol, decimal purchasePrice, long sharesOwned)  {    this.symbol = symbol;    this.purchasePrice = currentPrice = purchasePrice;    this.sharesOwned = sharesOwned;  }  public decimal CurrentPrice  { get { return currentPrice;             }                                 set { currentPrice = value;            } }  public string Symbol         { get { return symbol;                   } }  public decimal PurchasePrice { get { return purchasePrice;            } }  public long    SharesOwned   { get { return sharesOwned;              } }  public decimal Worth         { get { return CurrentPrice*SharesOwned; } }}class Test{  static void Main()  {    Stock msft = new Stock ("MSFT", 20, 1000);    Console.WriteLine (msft.Worth);                // 20000    msft.CurrentPrice = 30;    Console.WriteLine (msft.Worth);                // 30000  }}

自动属性:

public class Stock{  // ...  public decimal CurrentPrice { get; set; }}

get 和 set 访问:

public class Foo{  private decimal x;  public decimal X  {    get          {return x;}     internal set {x = value;}  }}

实现索引:

public class Portfolio{  Stock[] stocks;  public Portfolio (int numberOfStocks)  {    stocks = new Stock [numberOfStocks];  }  public int NumberOfStocks { get { return stocks.Length; } }  public Stock this [int index]      // indexer  {     get { return stocks [index];  }    set { stocks [index] = value; }  }}class Test{  static void Main()  {    Portfolio portfolio = new Portfolio(3);    portfolio [0] = new Stock ("MSFT", 20, 1000);    portfolio [1] = new Stock ("GOOG", 300, 100);    portfolio [2] = new Stock ("EBAY", 33, 77);    for (int i = 0; i < portfolio.NumberOfStocks; i++)      Console.WriteLine (portfolio[i].Symbol);  }}

多索引:

public class Portfolio{  ...  public Stock this[string symbol]  {    get    {      foreach (Stock s in stocks)        if (s.Symbol == symbol)          return s;      return null;    }  }}

静态构造函数:

class Test{  static Test()  {    Console.WriteLine ("Type Initialized");  }}

Partial方法:

// PaymentFormGen.cs — auto-generatedpartial class PaymentForm{  // ...  partial void ValidatePayment(decimal amount);}
// PaymentForm.cs — hand-authoredpartial class PaymentForm{  // ...  // partial void ValidatePayment(decimal amount)  {    if (amount > 100)    {      // ...    }  }}

继承:

public class Asset{  public string  Name;  public decimal PurchasePrice, CurrentPrice;}
public class Stock : Asset   // inherits from Asset{  public long SharesOwned;}public class House : Asset   // inherits from Asset{  public decimal Mortgage;}class Test{  static void Main()  {    Stock msft = new Stock()    { Name="MSFT", PurchasePrice=20, CurrentPrice=30, SharesOwned=1000 };    House mansion = new House    { Name="McMansion", PurchasePrice=300000, CurrentPrice=200000,      Mortgage=250000 };    Console.WriteLine (msft.Name);           // MSFT    Console.WriteLine (mansion.Name);        // McMansion    Console.WriteLine (msft.SharesOwned);    // 1000    Console.WriteLine (mansion.Mortgage);    // 250000  }}

多态:

class Test{  static void Main()  {    Stock msft    = new Stock ... ;    House mansion = new House ... ;    Display (msft);    Display (mansion);  }  public static void Display (Asset asset)  {    System.Console.WriteLine (asset.Name);  }}
static void Main() { Display (new Asset()); }    // Compile-time errorpublic static void Display (House house)         // Will not accept Asset{  System.Console.WriteLine (house.Mortgage);}

向下转换:

Stock msft = new Stock();Asset a = msft;                      // upcastStock s = (Stock)a;                  // downcastConsole.WriteLine (s.SharesOwned);   // 
Console.WriteLine (s == a); // trueConsole.WriteLine (s == msft); // true

虚拟函数成员:

public class Asset{  ...  public virtual decimal Liability { get { return 0; } }}
public class Stock : Asset { ... }public class House : Asset{  ...  public override decimal Liability { get { return Mortgage; } }}
House mansion = new House { Name="McMansion", PurchasePrice=300000, CurrentPrice=200000,   Mortgage=250000 };Asset a = mansion;decimal d2 = mansion.Liability;      // 250000

抽象类和抽象成员:

public abstract class Asset{  ...  public abstract decimal NetValue { get; }   // Note empty implementation}public class Stock : Asset{  ...                                     // Override an abstract method  public override decimal NetValue        // just like a virtual method.  {    get { return CurrentPrice * SharesOwned; }  }}public class House : Asset     // Every non abstract subtype must{                              // define NetValue.  ...  public override decimal NetValue  {    get { return CurrentPrice - Mortgage; }  }}

new 和 virtual

public class BaseClass{  public virtual void Foo()  { Console.WriteLine ("BaseClass.Foo"); }}public class Overrider : BaseClass{  public override void Foo() { Console.WriteLine ("Overrider.Foo"); }}public class Hider : BaseClass{  public new void Foo()      { Console.WriteLine ("Hider.Foo"); }}
Overrider o = new Overrider();BaseClass b1 = o;o.Foo();                           // Overrider.Foob1.Foo();                          // Overrider.FooHider h = new Hider();BaseClass b2 = h;h.Foo();                           // Hider.Foob2.Foo();                          // BaseClass.Foo

GetType() 和 typeof

using System;public class Point {public int X, Y;}class Test{  static void Main()  {    Point p = new Point();    Console.WriteLine (p.GetType().Name);             // Point    Console.WriteLine (typeof (Point).Name);          // Point    Console.WriteLine (p.GetType() == typeof(Point)); // True    Console.WriteLine (p.X.GetType().Name);           // Int32    Console.WriteLine (p.Y.GetType().FullName);       // System.Int32  }}

显式接口实现:

interface I1 { void Foo(); }interface I2 { int Foo(); }public class Widget : I1, I2{  public void Foo ()  {    Console.WriteLine ("Widget's implementation of I1.Foo");  }  int I2.Foo ()  {    Console.WriteLine ("Widget's implementation of I2.Foo");    return 42;  }}
Widget w = new Widget();w.Foo();                      // Widget's implementation of I1.Foo((I1)w).Foo();                // Widget's implementation of I1.Foo ((I2)w).Foo();                // Widget's implementation of I2.Foo

虚拟地实现接口成员:

public interface IUndoable { void Undo(); }public class TextBox : IUndoable{  public virtual void Undo()  {     Console.WriteLine ("TextBox.Undo");  }}public class RichTextBox : TextBox{  public override void Undo()  {    Console.WriteLine ("RichTextBox.Undo");  }}
RichTextBox r = new RichTextBox();r.Undo();                          // RichTextBox.Undo((IUndoable)r).Undo();             // RichTextBox.Undo((TextBox)r).Undo();               // RichTextBox.Undo

在子类中重新实现一个接口:

public interface IUndoable { void Undo(); }public class TextBox : IUndoable{  void IUndoable.Undo() { Console.WriteLine ("TextBox.Undo"); }}public class RichTextBox : TextBox, IUndoable{  public new void Undo() { Console.WriteLine ("RichTextBox.Undo"); }}
RichTextBox r = new RichTextBox();r.Undo();                 // RichTextBox.Undo      Case 1((IUndoable)r).Undo();    // RichTextBox.Undo      Case 2
public class TextBox : IUndoable{  public void Undo() { Console.WriteLine ("TextBox.Undo"); }}
RichTextBox r = new RichTextBox();r.Undo();                 // RichTextBox.Undo      Case 1((IUndoable)r).Undo();    // RichTextBox.Undo      Case 2((TextBox)r).Undo();      // TextBox.Undo          Case 3

替代接口重新实现:

public class TextBox : IUndoable{  void IUndoable.Undo()         { Undo(); }   // Calls method below  protected virtual void Undo() { Console.WriteLine ("TextBox.Undo"); }}public class RichTextBox : TextBox{  protected override void Undo() { Console.WriteLine ("RichTextBox.Undo"); }}

Flags enums枚举:

[Flags]public enum BorderSides { Left=1, Right=2, Top=4, Bottom=8 }
BorderSides leftRight = BorderSides.Left | BorderSides.Right;if ((leftRight & BorderSides.Left) != 0)   System.Console.WriteLine ("Includes Left");   // Includes Leftstring formatted = leftRight.ToString();   // "Left, Right"BorderSides s = BorderSides.Left;s |= BorderSides.Right;Console.WriteLine (s == leftRight);   // Trues ^= BorderSides.Right;               // Toggles BorderSides.RightConsole.WriteLine (s);                // Left

Enum枚举类型安全问题:

static bool IsFlagDefined (Enum e){  decimal d;  return ! decimal.TryParse(e.ToString(), out d);}[Flags]public enum BorderSides { Left=1, Right=2, Top=4, Bottom=8 }static void Main(){  for (int i = 0; i <= 16; i++)  {    BorderSides side = (BorderSides)i;    Console.WriteLine (IsFlagDefined (side) + " " + side);  }}

泛型:

public class Stack
{ int position; T[] data = new T[100]; public void Push (T obj) { data[position++] = obj; } public T Pop () { return data[--position]; }}
Stack
stack = new Stack
(); stack.Push(5);stack.Push(10);int x = stack.Pop();

泛方法:

static void Swap
(ref T a, ref T b){ T temp = b; a = b; b = temp;}

默认泛值:

static void Zap
(T[] array){ for (int i = 0; i < array.Length; i++) array[i] = default(T);}

约束:

static T Max 
(T a, T b) where T : IComparable
{ return a.CompareTo (b) > 0 ? a : b;}
static void Initialize
(T[] array) where T : new(){ for (int i = 0; i < array.Length; i++) array[i] = new T(); }
class Stack
{ Stack
FilteredStack() where U : T {...}}

泛型和协方差:

class Animal {}class Bear : Animal {}
public class ZooCleaner{  public static void Wash
(Stack
animals) where T : Animal {}}
Stack
bears = new Stack
();ZooCleaner.Wash (bears);

自引用泛型声明:

interface IEquatable
{ bool Equals (T obj); }public class Balloon : IEquatable
{ string color; int cc; public bool Equals (Balloon b) { if (b == null) return false; return b.color == color && b.cc == cc; }}

泛型类型中的静态数据的唯一性:

public class Bob
{ public static int Count; }class Test{ static void Main() { Console.WriteLine (++Bob
.Count); // 1 Console.WriteLine (++Bob
.Count); // 2 Console.WriteLine (++Bob
.Count); // 1 Console.WriteLine (++Bob
.Count); // 1 }}

对象初始化:

List
list = new List
{1, 2, 3};

转载于:https://www.cnblogs.com/yangzhenping/p/3345338.html

你可能感兴趣的文章
实验5
查看>>
git 下载 安装
查看>>
录制终端信息并回放
查看>>
JS中window.event事件使用详解
查看>>
ES6深入学习记录(一)class方法相关
查看>>
《BI项目笔记》用Excel2013连接和浏览OLAP多维数据集
查看>>
C语言对mysql数据库的操作
查看>>
SQL Server 数据库备份
查看>>
INNO SETUP 获得命令行参数
查看>>
Charles抓取https请求
查看>>
LAMP环境搭建
查看>>
C语言的变量的内存分配
查看>>
clientcontainerThrift Types
查看>>
链接全局变量再说BSS段的清理
查看>>
hdu 1728 逃离迷宫
查看>>
HTML5与CSS3权威指南之CSS3学习记录
查看>>
docker安装部署
查看>>
AVL树、splay树(伸展树)和红黑树比较
查看>>
多媒体音量条显示异常跳动
查看>>
运算符及题目(2017.1.8)
查看>>