博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2012-11-14 C#接口学习
阅读量:6806 次
发布时间:2019-06-26

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

hot3.png

    打算花段时间学习C#,现将每天的学习成功写成博客,以激励自己的学习。

    今天学习的是C#的接口相关知识。

    接口的命名规则:

    .NET文档建议接口名一大写字母"I"开头。

    类继承和接口的相同点与不同点:

    不同点:一个类只能继承一个基类,但是可以实现多个接口;

    相同点:基类可以引用继承类的实例,接口同样也可以引用一个类,比如:

    

Horse horse = new Horse();//假设Horse类实现了接口ILandBoundILandBound myHorse = horse;//合法
     接口的实现分为隐式实现和显示实现,隐式实现需要在实现的方法名前用"public"修饰符,显示实现不需要任何修饰符,但是需要在方法显示前面指定接口的名字,显示实现可以让不同的接口拥有相同的方法而不冲突。

    下面是一个使用接口的例子,例子中有两个接口IDraw,IColor,分别用来画图和给图形设置颜色;还有两个类Square(正方形), Circle(圆),这两个类都实现了IDraw, IColor两个接口,通过响应鼠标的左右键来绘制不同颜色的不同图案。

    代码:

    IDraw.cs:

    

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Windows.Controls;namespace Drawing{    interface IDraw    {        void SetLocation(int x, int y);        void Draw(Canvas canvas);    }}
IColor.cs:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Windows.Media;namespace Drawing{    interface IColor    {        void SetColor(Color color);    }}
Square.cs:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Windows.Controls;using System.Windows.Media;using System.Windows.Shapes;namespace Drawing{    class Square : IDraw, IColor    {        private int sideLength;        private int locX = 0, locY = 0;        private Rectangle rect = null;        public Square(int sideLength)         {            this.sideLength = sideLength;        }        void IDraw.SetLocation(int x, int y)        {            this.locX = x;            this.locY = y;        }        void IDraw.Draw(Canvas canvas)        {            if (this.rect != null)            {                //移除之前的形状                canvas.Children.Remove(this.rect);            }            else            {                this.rect = new Rectangle();            }            //设置正放形各项参数            this.rect.Height = this.sideLength;            this.rect.Width = this.sideLength;            Canvas.SetTop(this.rect, this.locY);            Canvas.SetLeft(this.rect, this.locX);            canvas.Children.Add(rect);        }        void IColor.SetColor(Color color)        {            if (this.rect != null)            {                SolidColorBrush brush = new SolidColorBrush(color);                this.rect.Fill = brush;            }        }    }}
Circle.cs

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Windows.Controls;using System.Windows.Media;using System.Windows.Shapes;namespace Drawing{    class Circle : IDraw, IColor    {        private int radius;        private int locX = 0, locY = 0;        private Ellipse circle = null;        public Circle(int radius)         {            this.radius = radius;        }        void IDraw.SetLocation(int x, int y)        {            this.locX = x;            this.locY = y;        }        void IDraw.Draw(Canvas canvas)        {            if (this.circle != null)            {                canvas.Children.Remove(circle);            }            else            {                this.circle = new Ellipse();            }            this.circle.Height = this.radius;            this.circle.Width = this.radius;            Canvas.SetTop(this.circle, this.locY);            Canvas.SetLeft(this.circle, this.locX);            canvas.Children.Add(circle);        }        void IColor.SetColor(Color color)        {            if (circle != null)            {                SolidColorBrush brush = new SolidColorBrush(color);                circle.Fill = brush;            }        }    }}
响应鼠标进行绘图的代码:

private void drawingCanvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)        {            //获取鼠标所在的位置            Point mouseLocation = e.GetPosition(this.drawingCanvas);            //设置正放形大小            Square square = new Square(100);            if (square is IDraw)            {                IDraw drawSquare = square;                //设置正放形绘图位置                drawSquare.SetLocation((int)mouseLocation.X, (int)mouseLocation.Y);                //把设置好的正方形画出来                drawSquare.Draw(drawingCanvas);            }            if (square is IColor)            {                IColor squareColr = square;                //设置填充颜色                squareColr.SetColor(Colors.BlueViolet);            }        }        private void drawingCanvas_MouseRightButtonDown(object sender, MouseButtonEventArgs e)        {            Point mouseLocation = e.GetPosition(this.drawingCanvas);            Circle circle = new Circle(100);            if (circle is IDraw)            {                IDraw drawCircle = circle;                drawCircle.SetLocation((int)mouseLocation.X, (int)mouseLocation.Y);                drawCircle.Draw(drawingCanvas);            }            if (circle is IColor)            {                IColor circleColr = circle;                circleColr.SetColor(Colors.HotPink);            }        }
效果图:

图书参考:《Visual C# 2010 从入门到精通》

转载于:https://my.oschina.net/fanxiao/blog/89351

你可能感兴趣的文章
【百度地图API】关于如何进行城市切换的三种方式
查看>>
How to provide highlighting with Spring data elasticsearch
查看>>
MongoDB 游标
查看>>
即将搭载人工智能芯片的华为Mate10,究竟会为业界带来什么?
查看>>
Android实现登录小demo
查看>>
AgentWeb是基于Android WebView一个功能完善小型浏览器库
查看>>
开放数据中心联盟推8个云计算应用模型
查看>>
学习数据分析的“里程碑”是什么?
查看>>
数据科学与DevOps之间的差距还有救吗?
查看>>
信息化一周回顾:金融业大数据十大趋势
查看>>
Http、TCP/IP协议与Socket之间的区别
查看>>
文思海辉:智慧数据避免企业成为大数据时代落伍者
查看>>
迅雷发布“星域CDN” 做条颠覆市场的鲶鱼
查看>>
英国《数字经济法案》
查看>>
Asp.net与Flex交互测试记录
查看>>
后退时保存表单状态
查看>>
泛函编程(13)-无穷数据流-Infinite Stream
查看>>
各驱动器和URL
查看>>
javascript生成二维码
查看>>
开发https应用
查看>>