本篇文章给大家谈谈c不实现接口成员,以及他不c接口对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
今天给各位分享c不实现接口成员的知识,其中也会对他不c接口进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
c#接口问题
接口中不能有任何的实现,但接口中可以定义成员,但只能定义以下成员:
属性,方法,事件以及索引器。
而抽象方法的定义是是,只要对象中含有抽象方法的类,都是属于抽象类的。也就是说一个普通的类中有一个没有实现的方法(抽象方法)那么该类必须加关键词,说明其是一个抽象类。从这里可以看出抽象类与普通类的区别就是至少有一个方法没有实现,或者称至少含有一个抽象方法。所以在抽象类中是可以实现方法体的。那么对于字段与常数等都是不做要求的,而这些却不能在接口不定义。接口不不能实现任何方法的。
在翻译资料中,很多时间我们都丢失了另一个名字:纯抽象类,因为很多人对超类这个术语而感兴趣,所以往往以为纯抽象类指的就是超类,其实不是一样的,超类在java中指的就是抽象,它只用来被继承,不可能进行实例化,说白了它说是一个抽象类,而纯抽象类则指没有任何方法实现的类,也有人认为纯抽象类是一个范畴,接口就是属于纯抽象类,而抽象类若是没有任何方法体的实现时,也是属于纯抽象类。但不管怎么说,其实在翻译时由于它对我们编程时起不到多大的理解做用,而被翻译去掉了,我们的术语中没有人说纯抽象类,但事实上在其他的术语中还是存在的。
当然,定义接口的成员,包括任何成员,都是不可实现的,而字段一般是一个引用值,或是值类型,所以在接口中是不可能实现的。虽然属性可以,但属性同样不能有实现的。
定义与实现其实是两码事的,所以在接口中是可以定义成员的。
这是接口类是否可以定义成员的解释。 回过头来看问题:
我觉得大家虽然都找到B答案是错的,但是该选择支的理解是错误的。
该支的意义是,抽象类自身可以定义成员,它的意思显然是不是可以给抽象类定义很多成员,而是它是否可以做为其他类或是自身类的成员,换句话或说,这个抽类象是否可以是其实类的成员类型,结果当然是可以的。比如抽象类可以做为某一个类的反回类型,也可以做为一个字段的类型,当然也可以做为属性的类型的。所以这句话多了自身两个字,理解不应该是类可以定义成员那么简单了。而事实上接口与抽象类都可以做为返回类型或字段类型的。
如果没有单独的语境,其实在C++中是可以实现多重继承的,我们的多重继承指的是一个类拥有多于一个的父类。也可以说可以继承于两个类的,而在单继承语言中是不可以的。C#是一个单继承语言,所以A的选支必须在有语境的时间才是对的。
不过这里的题也比较乱,这个是由于面向对象术语的不统一造成的。在java中,一个说基类,派生类,而在C#中一般说父类,子类。java中的超类实际就是C#中的抽象类。术语的语系环境还是不一样的。要是非要C#中说基类派生类也是未尝不可,因为C#与java的交流有很多的。术语混合着来也是一样的,但如果是正规的文献中,出现这种,怕是有点别扭了——因为在C#中的基类被另有所指,一般指的基类是最基础的类型——比如int等等。当然它虽然指的是最基础的类型,但它不愿意指的是原始类,如果说最最基础的怕是在C#中只有一种类型——object,如果非要再详细点,那么只可能有valuetype值类型, 如果是这样,基类的存在是没有意义的——这也是为什么在C#术语中基类没有被方泛使用的原因。换句话来说,基类在C#中,一种是为了沿用java,一种是指的最基础的类型都是不正规的称呼。所以在于D支上 ,是有些不正规的。一个类可以有多个基类的原因是因为类的线性继承,比如B类继承于A,C为继承于B,而A,B都可以做为C的基类(它不是Java中的基类,否则一个派生类只可能有一个基类),而接口可以通过多重继承,一个类可以继承很多个接口——一些无聊人的研究说可以继承127个接口,这可能与参数列表相关,但它不影响我们正常的编程,我也没那么无聊。但是接口最好不要继承接口,只能让类隐式线性继承,如果重复继承会引起不必要的麻烦的。比如:A类继承于IA接口,B类继承于A类,其实B类必须实现IA接口,这是一种隐式继承,如果你非写成B:A,IA,就是一种重复继承了,没有实际没有多大的意义了。
C#中接口成员的显示实现和隐式实现有什么区别?
隐式实现和显示实现的例子
隐式地实现接口成员
创建一个接口,Chinese,包含一个成员 Speak;我们创建一个类Speaker,实现接口Chinese
//隐藏式实现例子
public interface Chinese
{
string Speak();
}public class Speaker : Chinese
{
public string Speak()
{
return "中文";
}
}这个就是隐式实现
显式地实现接口成员 -- 创建一个仅通过该接口调用并且特定于该接口的类成员。这是使用接口名称和一个句点命名该类成员来实现的。
创建一个接口,English,包含一个成员 Speak;让我们的类Speaker来实现接口English//显式实现例子
public interface English
{
string Speak();
}public class Speaker : English
{
string English.Speak()
{
return "English";
}
} 隐式实现和显示实现的区别
1. 语法层面的区别
l 隐式方式Speaker的成员(Speak)实现有而且必须有自己的访问修饰符(public),显示实现方式Speaker的成员(Speak)不能有任何的访问修饰符。
l 显示实现方式Speaker使用接口名称和一个句点命名该类成员(Speak)来实现的:English.Speak()
2. Client的使用者层面
隐式实现的客户端调用,注意类的声明,可以用接口声明,也可以用实现类 Speaker声明。调用者都可以得到调用实例化对象的行为Speak;
class Program
{
static void Main(string[] args)
{
Chinese c = new Speaker();
c.Speak(); Speaker s = new Speaker();
s.Speak();
}
} 显式实现的客户端调用,注意类的声明,只可以用接口声明,调用者才可以可以得到调用实例化对象的行为Speak; Code
class Program
{
static void Main(string[] args)
{
English c = new Speaker();
c.Speak();
//下面写法将引起编译错误错误“PetShop.Speaker”不包含“Speak”的定义
// Speaker s = new Speaker();
// s.Speak();
}
}隐示实现对象声明为接口和类都可以访问到其行为, 显示实现只有声明为接口可以访问。
选择隐式实现还是显示实现
隐式和显式接口实现的关键区别显然并不在于方法声明,而是在于从类外部的可访问性。以下是一些基本的设计原则,可以利用它们来帮助自己选择显式还是隐式实现。
1. 业务语义的考虑?
考虑接口Chinese和English对于成员的Speak的业务需求,Speaker要实现这两个接口,如果采用隐式实现,语法没有问题,业务满足了吗?
例如:
Code
//服务端:
public class Speaker : English, Chinese
{
public string Speak()
{
return "English";
}
}//调用端:
class Program
{
static void Main(string[] args)
{
Chinese c = new Speaker();
c.Speak();
}
}呵呵,这完全可以编译通过,但是放在实际的业务场景去考虑,这不是很幽默吗?这个时候就考虑使用一个显式的实现显式实现
//服务端:
public class Speaker:English,Chinese
{
string English.Speak()
{
return "English";
}
string Chinese.Speak()
{
return "中文";
}
}//调用端:
class Program
{
string English.Speak()
{
return "English";
} string Chinese.Speak()
{
return "中文";
}
}2. 实现类是否准备让调用者独立使用?
虽然显示接口实现提供了更好的封装性,对调用者使用可以强制其进行接口声明,但是如果你准备让用户可以单独使用你这个类的功能,请提供隐式实现。
C#中的接口VS Java中的接口
Java中并没有在语言层面提供隐式和显式接口的实现,那么对于我们例子的中场景如何解决?当然有办法,只是没有C#优雅,还是Java故意在语言层面不提供这样的解决方案,难道认为他破坏了类的单一职责原则?我也在想这个问题,是不是一个Speaker只实现Chinese或者English之一那才是比较好的设计?
C#中接口总结
接口描述的是可属于任何类或结构的一组相关功能。接口可由方法、属性、事件、索引器或这四种成员类型的任意组合构成。接口不能包含字段。接口成员一定是公共的,而且是默认的,不要画蛇添足。
当类或结构继承接口时,意味着该类或结构为该接口定义的所有成员提供实现。接口本身不提供类或结构能够以继承基类功能的方式继承的任何功能。但是,如果基类实现接口,派生类将继承该实现。
如果一个类机继承类并实现接口,一定要吧类写在符号:后面的第一个位置。
C语言中的接口如何实现?它和函数的定义有啥区别,请C高手来指导,杜绝Java的接口和类的回答因为我精通JAVA
C语言中接口和函数其实没什么差别
c不实现接口成员,只是有些人
c不实现接口成员的习惯问题,不过一叫接口
c不实现接口成员的都是针对某一个模块的功能函数集合,像一个图片采集模块一般就会有三种方式,1、头文件和.c文件;2、头文件和.so动态库;3、头文件和.a静态库。在进行程序编写时我们要添加头文件,在进行编译时,必须加入,该模块的.c或.so或.a,一种就行。
一般我们编写小函数接口,一般需要一个.h和一个.c就行
c不实现接口成员了。函数的声明都是在.h中,实现都在.c中,当模块编写.c有点大时,我们可以为了编译时的速度,把.c文件编译成.so和.a。
//hello.h
#ifndef _HELLO_H_
#define _HELLO_H_
//#define 宏定义也应该在这
#include <stdio.h
void hello();
#endif
//hello.c
#inlcude "hello.h"
void hello() {
printf("Hello word!");
}
大概就是这样,只不过我是linux下的,函数接口定义大同小异吧
关于c不实现接口成员和他不c接口的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
c不实现接口成员的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于他不c接口、c不实现接口成员的信息别忘了在本站进行查找喔。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
暂时没有评论,来抢沙发吧~