`
CanBeatle
  • 浏览: 166919 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

C#笔记(2)

    博客分类:
  • C#
阅读更多

 二、Interface

 

       接口只能包含抽象成员,也就是说:接口不能有字段,不能有构造函数,不能提供方法实现。接口可以定义属性
(本质上是方法)协议。struct也可以实现接口。接口实现必须实现祖先接口的所有方法。
       接口命名冲突,例如IDrawToForm和IDrawToPrinter都包含Draw()方法,这时候:

Class Octagon :  IDrawToForm,  IDrawToPrinter
{
        public void Draw(){…}
}

 

      如果有Octagon的对象oct,那么((IDrawToForm)oct).Draw()和(( IDrawToPrinter)oct).Draw()都是调用同一个实现,这时候可以使用显式接口实现语法:

class Octagon :  IDrawToForm,  IDrawToPrinter
{
    //注意,没有访问修饰符,因为必须是私有的
    void IDrawToForm.Draw(){…}
    void IDrawToPrinter.Draw(){…}
}
 

     A. IEnumerable和IEnumerato r
     任何支持GetEnumerator()方法的或者实现IEnumerable接口类型都可以通过foreach结构进行运算。

public interface IEnumerable
{
       IEnumerator GetEnumerator();
}
public interface IEnumerator
{
       bool MoveNext ();
       object Current { get;}
       void Reset ();
}
 

      B. ICloneable

public interface ICloneable
{
       object  Clone();
}
System.Object的MemberwiseClone()得到一个浅拷贝。

 

      C. IComparable,IComparer

public interface IComparable
{
      int CompareTo(object o);
 }

interface IComparer
{
      int Compare(object o1, object o2);
}

 

     Array.Sort(Alist),其中Alist里的成员必须实现IComparable接口, IComparer不是在要排序的类型中实现,而是在辅助类中实现的:

public class PetNameComparer : IComparer
{
     int IComparer.Compare(object o1, object o2)
     {
            Car t1 = (Car)o1;
            Car t2 = (Car)o2;
            return String.Compare(t1.PetName, t2.PetName);
     }
}
static void Main(string[] args)
{
      ...
      Array.Sort(myAutoList, new PetNameComparer());
}

 

三、  构造函数,static

 

class Motorcycle
{
   public  Motorcycle(string name) : this(0, name)//调用另一个构造函数
   {}
}

 

   静态构造函数

class Motorcycle
{
   public static string  company
  //不能有访问修饰符,不能有参数,只有一个,只执行一次(在访问静态成员之前)
  // 执行在任何实例构造函数之前。
   static  Motorcycle ()
  {
     company = “BMW”;
  }
}

 

如果一个类定义成static,不能使用new创建对象,且只能包含static成员。

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics