zoukankan      html  css  js  c++  java
  • 接口 方法 属性 索引器 事件

    代码
    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.");
            }
        }
     

    }
  • 相关阅读:
    MVC,MVP,MVVM的区别
    jQuery Mobile 实现苹果滑动删除闹钟功能的几点总结
    AngularJS执行流程详解
    基于angularJS的表单验证练习
    jQuery 中 attr() 和 prop() 方法的区别
    天猫消息盒子的CSS实现
    jQuery事件之传递参数
    浅谈js中的垃圾两种回收机制
    js中的DOM操作汇总
    log4net
  • 原文地址:https://www.cnblogs.com/oneroom/p/interface.html
Copyright © 2011-2022 走看看