clr via c#インタフェース

8310 ワード

1、共通インタフェースとその定義
public interface IDisposable{
void Dispose();

}

public interface IEnumerable}{
IEnumerator GetEnumerator();

}

public interface IEnumerable:IEnumerable{
IEnumerator GetEnumerator GetEnumerator()
}

public interface ICollection:IEnumerable,IEnumerable {
void Add(T item);
void Clear();
Boolean Contains(T item);
void CopyTo(T[] array,int32 arrayIndex);
int32 Count{get;}
Boolean IsReadOnly {get;}
}
  • インタフェースの継承:インタフェースの継承は、あるクラスがインタフェースを継承する場合、そのインタフェースの継承インタフェースを実現しなければならない方法を示す.
  • は、例える、これらの方法を実現しなければならない.
  •  public class MyClassForInterface : ICollection where T:class,new()
        {
            public int Count => throw new NotImplementedException();
    
            public bool IsReadOnly => throw new NotImplementedException();
    
            public void Add(T item)
            {
                throw new NotImplementedException();
            }
    
            public void Clear()
            {
                throw new NotImplementedException();
            }
    
            public bool Contains(T item)
            {
                throw new NotImplementedException();
            }
    
            public void CopyTo(T[] array, int arrayIndex)
            {
                throw new NotImplementedException();
            }
    
            public IEnumerator GetEnumerator()
            {
                throw new NotImplementedException();
            }
    
            public bool Remove(T item)
            {
                throw new NotImplementedException();
            }
    
            IEnumerator IEnumerable.GetEnumerator()
            {
                throw new NotImplementedException();
            }
        }

    2,インタフェースを実現する時、いくつかの結果
     public class Base : IDisposable
        {
            public void Dispose()//      ,  virutal,     virtual sealed---    .
            {
                Console.WriteLine("Base's Dispose!");
            }
        }
        public class Derived : Base, IDisposable
        {
            public new void Dispose()//new,            Dispose  .override...        .
            {
                Console.WriteLine("Derived's Dispose!");
            }
        }
        public static class CallBaseDerivedOfInterface
        {
            public static void CallBaseAndDerived()
            {
                Base b = new Base();//b   , b        Base;
                Derived d = new Derived();//d    d        Derived
                b.Dispose();//  b    Dispose
                d.Dispose();//  d    Dispose
                ((IDisposable)b).Dispose();//  b       Dispose,Base.Dispose
                ((IDisposable)d).Dispose();//  d       Dispose,Derived.Dispose
                b = new Derived();//b    Base,b       Derived
                b.Dispose();//  Base.Dispose
                ((IDisposable)b).Dispose();//  b    Dispose---Derived.Dispose
            }
        }
    //  

    Base's Dispose! Derived's Dispose! Base's Dispose! Derived's Dispose! Base's Dispose!//----Baseを呼び出すDispose Derived's Dispose!//---Derivedを呼び出す.Dispose
    3,暗黙的および明示的なインタフェースメソッド実装
     public class SimpleType : IDisposable
        {
            public void Dispose()
            {
                Console.WriteLine("Dispose");
            }
        }

    このクラスのタイプのメソッドテーブルには、次のものが含まれます.
  • Object定義のすべての虚実列メソッド
  • IDisposeable定義のすべてのインタフェースメソッド.Dispose();
  • SimpleTypeが導入した新しい方法Dispose()

  • 本列中および前列中でb.Dispose()---を呼び出すとSimpleType定義のDispose()メソッドが呼び出される.
    (IDispose)b)を呼び出す.Dispose---はインタフェースのDispose()メソッドを呼び出す.
     public class SimpleType : IDisposable
        {
            public void Dispose()
            {
                Console.WriteLine("Dispose");
            }
            void IDisposable.Dispose()//       
            {
                Console.WriteLine("IDispose.Dispose");
            }
        }
    SimpleType st = new SimpleType();
                st.Dispose();
                ((IDisposable)st).Dispose();//               .
    //

    Dispose IDispose.Dispose