第四期讲课内容(刀疤主讲)

本文详细介绍了C#中的名字空间与接口的概念及使用方法。名字空间用于组织C#程序,防止命名冲突;接口定义了一组方法、属性、事件等,实现接口的类必须遵循这些规范。本文还探讨了名字空间的声明、使用别名、引入名字空间等问题,并深入解析了接口声明、成员访问、执行方式等内容。

上一期讲了C#的数据类型(值类型﹑引用类型)和语句﹐本期我们讲名字空间与接口

1名字空间

c#程序是使用名字空间组织的﹐既以做内部组织形式﹐也可以用做外部组织形式﹐从而使程序中的变量方法供其它序调用。

         1.1编译单元

         编译单元就是一个源文件的全部结构

         1.2字空间的声明

         名字空间隐式的指定为public﹐不能包含任何访问修饰符

         ****

namespace n1.n2

         {

                 class a{}  class b{}

}

*****

namespace n1

         {

                 namespace n2

                 {

                           class a{}  class b{}

}

}

****

namespace n1.n2

         {

                 class a{}

}

namespace n1.n2

         {

                 class b{}

}

以上这三种的名字空间都是一致的

 

 

 

 

 

 

 

 

 

 

 

1.3using指示符

1.3.1using 别名

                   ****

namespace n1.n2

                   {

                 class a{}  class b{}

}

****

namespace n3

                   {

                 using r = n1.n2.a;//r n1.n2.a的别名

                 class b : r{}    

}

注意﹐一个别名的生效不是由别名自身决定的也不是有其它别名决定的

                   ****

namespace n1.n2

                   {

                 class a{}  class b{}

}

****

namespace n3

                   {

                 using r1 = n1;

                 using r2 = r1.n2;//这样是错误的﹐因为r1未知﹐r2的声明不受r1的影响    

}

1.3.2using 名字空间

****

namespace n1.n2

                   {

                 class a{}

}

****

namespace n3

                   {

                 using n1.n2;

                 class b : a{}   

}

****

 

 

 

 

注意﹐不能引进嵌套的名字空间

****

namespace n1.n2

                   {

                 class a{}

}

****

namespace n3

                   {

                 using n1;

                 class b : n2.a{} //这样是错误的﹐n2未知  

}

****

注意﹐不能产生歧义

****

namespace n1

                   {

                 class a{}

}

****

namespace n2

                   {

                 class a{}

}

****

namespace n3

                   {

                            using n1;

                 using n2;

                 class b : a{} //这样是错误的﹐a是不明确的  

}

****

上面讲的名字空间引用的问题﹐有点象变量作用域的问题﹐需要注意

 

 

 

 

 

 

 

 

 

 

2接口

接口定义了一个协议﹐执行接口的类或结构必须遵守协议﹐接口可以从多个基本接口继承﹐类和结构也可以执行多个接口。

接口可以包含方法﹑属性﹑事件和索引。接口本身不提供它定义成员的执行。接口只是指定类或执行接口的接口中的成员。

有了接口我们就可以拋开编程语言的限制﹐当然这只是理论上的﹐实现接口的类或接口要与接口的定义严格一致。

接口是重点﹐也是c#的精华所在﹐不管你能接受多少﹐但你必须应该记住两点﹕接口是一种契约﹐目的是为了跨语言编程的实现。

2.1接口声明

       [属性选择] [接口修饰语选择] interface 接口标识符 [:基础接口[,基础接口…]]  {接口体}

[attributes] [modifiers] interface identifier [:base-list] {interface-body}[;]

2.1.1接口修饰语

        new public protected internal private﹐注意new只用在嵌套的接口﹐表示覆盖(隐蔽)了继承而来的同名成员﹐

      它的控制访问权限

        2.1.2基础接口

        一个接口可以从很多的接口继承﹐叫做外部的基本接口

        interface I1

        {

                 int Count {get;set;}

                   }

interface I2

                   {

       void Count(int i)

                   }

interface I3 : I1, I2 {}

一个接口直接或间接继承自己是错误的﹐一个基础接口至少可以访问接口自身

2.1.3接口体

接口体里包含了接口的成员

{

       接口成员声明

                   }

         2.2接口成员

         包括继承的基础接口成员和接口自身生成的成员。

可以声明0个或多个成员﹐接口的成员必须是方法﹑属性﹑事件或索引﹐不能包括常数﹑域﹑操作符﹑构造﹑析构﹐也不能包括任何形式的静态成员。

所有的接口成员都隐式的含有公共访问权限﹐即public﹐因此再包含其它任何修饰都是错误的。

接口的成员之间不能相互同名﹐继承而来的成员不用再定义,但接口可以定义与继承而来的成员同名的成员这时接口成员覆盖了继承而来的成员,这会导致给出一个警告﹐可以使用new明确的表示覆盖(隐藏)基本接口成员。

pblic delegate void StringListEvent(ISringList sender)

public interface ISingList

{

        void Add(string s);//方法

        int Count {get;}//属性﹐且是只读的

        event StringListEvent Changed;//事件

        string this[int index] {get;set;}//索引

}

2.3接口成员的访问

通过I.MI[A]进行成员访问和索引访问

interface IIneger

{

void Add(int i);

}

interface IDouble

{

void Add(double i);

}

interface INumber : IIneger, IDouble {}

class C

{

        void Test(INumber n)

        {

                 n.Add(1);                            //错误﹐有歧义﹐因为两个方法都可以用

                 n.Add(1.0);                //正确﹐因为只有IDouble可用

                 ((IIneger)n).Add(1);          //正确﹐因为只有Iineger 可选

                 ((IDouble)n).Add(1);          //正确﹐因为只有IDouble可选

}

}

举个隐蔽的例子

interface I1

{

void Add(int i);

}

interface I2 : I1

{

new void Add(int i);

}

interface I3 : I1

{

void test();

}

interface ITest : I2, I3 {}

class CTest{   

void test(ITest d){

                 d.Add(1);                    //调用 I2.Add﹐因为I1.Add被隐蔽了

                 ((I1)d).Add(1);           //调用 I1.Add

                 ((I2)d).Add(1);           //调用 I2.Add

                 ((I3d).Add(1);             //调用 I1.Add

        }

}

2.4完全资格接口成员名字

接口的完全资格名是这样构成的﹕接口名加点"." 再跟成员名﹐如果接口是名字空间的成员,完全资格名还必须包含名字空间的名称。

2.5接口执行

接口通过类或结构来执行﹐前面已经就接口成员举了例子﹐先面看看用类来执行接口的例子

interface ICloneable

{

Object Clone();

}

interface IComparable

{

int CompareTo(object other);

}

class ListEntry : ICloneable, IComparable

{

        void Object Clone() {…}

        public int CompareTo(object other) {…}

}

这个例子中﹐类ListEntry继承接口ICloneable, IComparable为自己的接口﹐并且实现了接口定义的两个方法﹐这种实现接口的方法是隐式的﹐可以实现接口的父接口。

2.5.1外部接口成员执行

先看下面的例子

interface ICloneable

{

Object Clone();

}

interface IComparable

{

int CompareTo(object other);

}

class ListEntry : ICloneable, IComparable

{

       Object ICloneable.Clone() {…}

       int IComparable.CompareTo(object other) {…}

}

这个例子与上面的区别是﹐接口执行直接指向了一个完全资格接口成员的名字的方法﹐这种方法实现的成员称为外部接口成员﹐这种实现接口的方法是显示的。

 

 

外部接口成员主要有两个重要的用途

1)       外部接口成员体执行不能通过类或结构的实例访问﹐这样类或结构的使用者就可以不会直接使用该接口。

2)       避免了因为接口成员之间同名而发生混淆

2.5.2继承接口执行

一样接口也可以继承﹐区别是接口只继承说明方法﹐而不包括实现。

不通过显式的实现一个接口,一个派生类不能用任何方法改变它从它的基本类继承的接口映射﹐但是,当一个接口方法被映射到一个类中的虚方法时,派生类就不可能覆盖这个虚方法并且改变接口的实现函数。

显式接口成员实现程序不能被声明为虚的﹐但是可以通过继承的类覆盖方法进行特殊的转换。

2.5.3接口的重新实现

继承了接口执行的类可以对接口进行重实现。

2.5.4接口的映射

在执行类的或结构中定位接口成员执行的过程叫做接口映射

1)       外部接口成员级别优先于其它成员

2)       private protected static成员不参加映射

后面的这些东西可能听着比较模糊﹐没关系﹐我这里只是希望你能对接口有个入门﹐知道它是做什么用的﹐大致如何使用﹐具体的细节问题请你自己回去研究。

目的是为了跨语言编程的实现

说实话写asp.net用到接口的地方并不多,我本人也很少写,只是做过几个例子, 接口本身就是比较抽象,任何没有经过自己理解的讲解都是晦涩的,我希望大家能回去看一下,做几个简单的例子,否则理解不了, 接口这个东西你做的时候你就会发现它很简单,也很好用.

你记住两点即可,接口是协议是契约是规范,目的是跨语言编程,实现C#的组件级编程语言的功能,大大的有用.

有了这个基础下周我们开讲类与结构以及面向对象编程设计

今天就到这里.

多源动态最优潮流的分布鲁棒优化方法(IEEE118节点)(Matlab代码实现)内容概要:本文介绍了基于Matlab实现的多源动态最优潮流的分布鲁棒优化方法,适用于IEEE118节点电力系统。该方法旨在应对电力系统中源荷不确定性带来的挑战,通过构建分布鲁棒优化模型,有效处理多源输入下的动态最优潮流问题,提升系统运行的安全性和经济性。文中详细阐述了模型的数学 formulation、求解算法及仿真验证过程,并提供了完整的Matlab代码实现,便于读者复现与应用。该研究属于电力系统优化调度领域的高水平技术复现,具有较强的工程实用价值。; 适合人群:具备电力系统基础知识和Matlab编程能力的研究生、科研人员及从事电力系统优化调度的工程技术人员,尤其适合致力于智能电网、鲁棒优化、能源调度等领域研究的专业人士。; 使用场景及目标:①用于电力系统多源环境下动态最优潮流的建模与求解;②支撑含可再生能源接入的电网调度决策;③作为鲁棒优化方法在实际电力系统中应用的教学与科研案例;④为IEEE118节点系统的仿真研究提供可复现的技术支持。; 阅读建议:建议结合提供的Matlab代码逐模块分析,重点关注不确定变量的分布鲁棒建模、目标函数构造及求解器调用方式。读者应具备一定的凸优化和电力系统分析基础,推荐配合YALMIP工具包与主流求解器(如CPLEX、Gurobi)进行调试与扩展实验。
内容概要:本文系统介绍了物联网与云计算的基本概念、发展历程、技术架构、应用场景及产业生态。文章阐述了物联网作为未来互联网的重要组成部分,通过RFID、传感器网络、M2M通信等技术实现物理世界与虚拟世界的深度融合,并展示了其在智能交通、医疗保健、能源管理、环境监测等多个领域的实际应用案例。同时,文章强调云计算作为物联网的支撑平台,能够有效应对海量数据处理、资源弹性调度和绿色节能等挑战,推动物联网规模化发展。文中还详细分析了物联网的体系结构、标准化进展(如IEEE 1888、ITU-T、ISO/IEC等)、关键技术(中间件、QoS、路由协议)以及中国运营商在M2M业务中的实践。; 适合人群:从事物联网、云计算、通信网络及相关信息技术领域的研究人员、工程师、高校师生以及政策制定者。; 使用场景及目标:①了解物联网与云计算的技术融合路径及其在各行业的落地模式;②掌握物联网体系结构、标准协议与关键技术实现;③为智慧城市、工业互联网、智能物流等应用提供技术参考与方案设计依据;④指导企业和政府在物联网战略布局中的技术选型与生态构建。; 阅读建议:本文内容详实、覆盖面广,建议结合具体应用场景深入研读,关注技术标准与产业协同发展趋势,同时结合云计算平台实践,理解其对物联网数据处理与服务能力的支撑作用。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值