接口 方法 属性 索引器 事件

代码
using System;
using System.Collections.Generic;
using System.Text;

namespace myinterface
{


    
interface IPoint
    {
        
// Property signatures:
        int x
        {
            
get;
            
set;
        }

        
int y
        {
            
get;
            
set;
        }
    }

    
public class Point : IPoint
    {
        
// Fields:
        private int _x;
        
private int _y;

        
// Constructor:
        public Point(int x, int y)
        {
            _x 
= x;
            _y 
= y;
        }

        
// Property implementation:
        public int x
        {
            
get
            {
                
return _x;
            }

            
set
            {
                _x 
= value;
            }
        }

        
public int y
        {
            
get
            {
                
return _y;
            }
            
set
            {
                _y 
= value;
            }
        }
    }



    
class Program
    {
        
public delegate void GreetingDelegate(string name);
        
public static void EnglishGreeting(string name)
        {
            Console.WriteLine(
"Morning, " + name);
        }

        
public static void ChineseGreeting(string name)
        {
            Console.WriteLine(
"早上好, " + name);
        }

        
//注意此方法,它接受一个GreetingDelegate类型的方法作为参数
        public static void GreetPeople(string name, GreetingDelegate MakeGreeting)
        {
            MakeGreeting(name);
        }

        
public static void getStr(string str)
        {
            Console.WriteLine(str);
        }



        
static void Main(string[] args)
        {

            Point p1 
= new Point(55);
            Console.Write(p1.x);

            
string[] str_num = "1,2,3,7,6,5".Split(',');

            
// GreetingDelegate gd1 = new GreetingDelegate(EnglishGreeting);

            
// GreetPeople("Jimmy Zhang", gd1);

            
int[] int_num = Array.ConvertAll<stringint>(str_num, delegate(string s) { return int.Parse(s); });

           
// Console.Write(string.Join("",int_num));
            foreach (int item in int_num)
            {
                Console.Write(item);
            }


               GreetPeople(
"Jimmy Zhang", EnglishGreeting);
               GreetPeople(
"张子阳", ChineseGreeting);
               GreetPeople(
"zj", getStr);



               SampleClass sc1 
= new SampleClass();

               IControl c 
= (IControl)sc1;
               ISurface ss 
= (ISurface)sc1;
               c.Paint();
               ss.Paint();

               sc1.Paint(); 
//  错误    1    “test.SampleClass”并不包含“Paint”的定义     



            DayCollection week 
= new DayCollection();
        System.Console.WriteLine(week[
"Fri"]);

        
// Raises ArgumentOutOfRangeException
      
//  System.Console.WriteLine(week["Made-up Day"]);



 
        TempRecord tempRecord 
= new TempRecord();
        
// Use the indexer's set accessor
        tempRecord[3= 58.3F;
        tempRecord[
5= 60.1F;

        
// Use the indexer's get accessor
        for (int i = 0; i < 10; i++)
        {
            System.Console.WriteLine(
"Element #{0} = {1}", i, tempRecord[i]);
        }

        
// Keep the console window open in debug mode.



//接口索引
        IndexerClass test = new IndexerClass();
        
// Call the indexer to initialize the elements #2 and #5.
        test[2= 4;
        test[
5= 32;
        
for (int i = 0; i <= 10; i++)
        {
            System.Console.WriteLine(
"Element #{0} = {1}", i, test[i]);
        }


//接口事件

        Shape shape 
= new Shape();
        Subscriber1 sub 
= new Subscriber1(shape);
        Subscriber2 sub2 
= new Subscriber2(shape);
        shape.Draw();

        Console.WriteLine(
"Press Enter to close this window.");
        Console.ReadLine();





        System.Console.WriteLine(
"Press any key to exit.");






               Console.ReadKey();


 
        }
    }

    
interface IControl
    {
        
void Paint();
    }
    
interface ISurface
    {
        
void Paint();
    }
    
public class SampleClass : IControl, ISurface
    {
        
// Both ISurface.Paint and IControl.Paint call this method.
        void IControl.Paint()
        {
            System.Console.WriteLine(
"IControl.Paint");
        }
        
void ISurface.Paint()
        {
            System.Console.WriteLine(
"ISurface.Paint");
        }
   
public     void Paint()
        {
            System.Console.WriteLine(
"SampleClass.Paint");
        }
    }


    
interface ILeft
    {
        
int P { get;}
    }
    
interface IRight
    {
        
int P();
    }

    
class Middle : ILeft, IRight
    {
        
public int P() { return 0; }
        
int ILeft.P { get { return 0; } }
    }


    
//索引器--字符
    class DayCollection
    {
        
string[] days = { "Sun""Mon""Tues""Wed""Thurs""Fri""Sat" };

        
// This method finds the day or returns -1
        private int GetDay(string testDay)
        {

            
for (int j = 0; j < days.Length - 1; j++)
            {
                
if (days[j] == testDay)
                {
                    
return j;
                }
            }

            
throw new System.ArgumentOutOfRangeException(testDay, "testDay must be in the form \"Sun\", \"Mon\", etc");
        }

        
// The get accessor returns an integer for a given string
        public int this[string day]
        {
            
get
            {
                
return (GetDay(day));
            }
        }
    }
    
//索引器--整型

    
class TempRecord
    {
        
// Array of temperature values
        private float[] temps = new float[10] { 56.2F56.7F56.5F56.9F58.8F
                                            
61.3F65.9F62.1F59.2F57.5F };

        
// To enable client code to validate input 
        
// when accessing your indexer.
        public int Length
        {
            
get { return temps.Length; }
        }
        
// Indexer declaration.
        
// If index is out of range, the temps array will throw the exception.
        public float this[int index]
        {
            
get
            {
                
return temps[index];
            }

            
set
            {
                temps[index] 
= value;
            }
        }
    }
    
//接口索引
    
// Indexer on an interface:
    public interface ISomeInterface
    {
        
// Indexer declaration:
        int this[int index]
        {
            
get;
            
set;
        }
    }

    
// Implementing the interface.
    class IndexerClass : ISomeInterface
    {
        
private int[] arr = new int[100];
        
public int this[int index]   // indexer declaration
        {
            
get
            {
                
// Check the index limits.
                if (index < 0 || index >= 100)
                {
                    
return 0;
                }
                
else
                {
                    
return arr[index];
                }
            }
            
set
            {
                
if (!(index < 0 || index >= 100))
                {
                    arr[index] 
= value;
                }
            }
        }
    }
    
//接口事件
    public interface IDrawingObject
    {
        
// Raise this event before drawing
        
// the object.
        event EventHandler OnDraw;
    }
    
public interface IShape
    {
        
// Raise this event after drawing
        
// the shape.
        event EventHandler OnDraw;
    }


    
// Base class event publisher inherits two
    
// interfaces, each with an OnDraw event
    public class Shape : IDrawingObject, IShape
    {
        
// Create an event for each interface event
        event EventHandler PreDrawEvent;
        
event EventHandler PostDrawEvent;

        
// Explicit interface implementation required.
        
// Associate IDrawingObject's event with
        
// PreDrawEvent
        event EventHandler IDrawingObject.OnDraw
        {
            add { PreDrawEvent 
+= value; }
            remove { PreDrawEvent 
-= value; }
        }
        
// Explicit interface implementation required.
        
// Associate IShape's event with
        
// PostDrawEvent
        event EventHandler IShape.OnDraw
        {
            add { PostDrawEvent 
+= value; }
            remove { PostDrawEvent 
-= value; }
        }

        
// For the sake of simplicity this one method
        
// implements both interfaces. 
        public void Draw()
        {
            
// Raise IDrawingObject's event before the object is drawn.
            EventHandler handler = PreDrawEvent;
            
if (handler != null)
            {
                handler(
thisnew EventArgs());
            }
            Console.WriteLine(
"Drawing a shape.");

            
// RaiseIShape's event after the object is drawn.
            handler = PostDrawEvent;
            
if (handler != null)
            {
                handler(
thisnew EventArgs());
            }
        }
    }
    
public class Subscriber1
    {
        
// References the shape object as an IDrawingObject
        public Subscriber1(Shape shape)
        {
            IDrawingObject d 
= (IDrawingObject)shape;
            d.OnDraw 
+= new EventHandler(d_OnDraw);
        }

        
void d_OnDraw(object sender, EventArgs e)
        {
            Console.WriteLine(
"Sub1 receives the IDrawingObject event.");
        }
    }
    
// References the shape object as an IShape
    public class Subscriber2
    {
        
public Subscriber2(Shape shape)
        {
            IShape d 
= (IShape)shape;
            d.OnDraw 
+= new EventHandler(d_OnDraw);
        }

        
void d_OnDraw(object sender, EventArgs e)
        {
            Console.WriteLine(
"Sub2 receives the IShape event.");
        }
    }
 

}
原文地址:https://www.cnblogs.com/oneroom/p/interface.html