社区
C#
帖子详情
接口作为函数参数的问题
drq6772
2008-06-09 11:11:15
请问:当接口作为函数参数的时候,代表什么意思?
...全文
410
7
打赏
收藏
接口作为函数参数的问题
请问:当接口作为函数参数的时候,代表什么意思?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
drq6772
2008-06-09
打赏
举报
回复
我可能是概念有点混乱,楼上的兄弟用 Icheckuser user,其中的user是接口Icheckuser的实例吗?接口不是不能实例化的吗?
wanghui0380
2008-06-09
打赏
举报
回复
没啥特别意思,任何对象都可以当参数
使用接口有可能是封装内部逻辑,让调用者并不用关心函数内部是如何实现的,这样做一是规范调用代码,而是减轻调用者理解业务逻辑的难度(实际上,使用接口你根本不用去关心人家内部是如何做的,传给他接口就成)
比如:传统的一个函数 checkuser(string name,string password);你调用时需要先知道这个函数让你传了两个参数
接口 Icheckuser
{
string name;
string passwrod;
}
内部逻辑: checkuser(接口icheckuser user)
{
if(user.name=="" && user.password=="")
{
//do something
}
}
当你在页面也继承该接口实现(页面和内部类都继承同一接口,这样可以保证程序员都使用同样的规范)
这样调用代码就可以规范成:
form :Icheckuser //继承并实现接口
string name{
get{return TextBox1.Text;}
set {TextBox1.Text=value;}
}
string password{
get{return TextBox2.Text;}
set {TextBox2.Text=value;}
}
checkuser((Icheckuser)this); //这里你不用管内部是如何的,你只管实现你自己该管的事情就行了
fuadam
2008-06-09
打赏
举报
回复
针对接口编程,封装了变化
lya121
2008-06-09
打赏
举报
回复
意义恨难说清。
接口做为参数传递 以及 接口作为返回类型 都是说的实现了这个接口的类的对象。
做多了就容易理解了。
amandag
2008-06-09
打赏
举报
回复
把接口作为函数的参数,那么任何实现了接口的类的实例都可以作为此函数的参数传递
wanghui0380
2008-06-09
打赏
举报
回复
Icheckuser user=(Icheckuser)this//这里不是new而是接口转换,this是在前面new的
interface(接口)
[attributes] [modifiers] interface identifier [:base-list] {interface-body}[;]
一个接口定义一个协定。实现接口的类或结构必须遵守其协定。接口可以从多个基接口继承,而类或结构可以实现多个接口。接口可以包含方法、属性、事件和索引器。接口本身不提供它所定义的成员的实现。接口只指定实现该接口的类或接口必须提供的成员。接口可以是命名空间或类的成员,并且可以包含下列成员的签名:方法属性 索引器.
一个接口可从一个或多个基接口继承。接口可由类实现。实现的接口的标识符出现在类的基列表中。被继承的接口称为该接口的显式基接口。当接口具有一个或多个显式基接口时,在该接口声明中,接口标识符后跟一个冒号以及由逗号分隔的基接口标识符列表。接口的基接口是显式基接口及其基接口。换言之,基接口集是显式基接口、它们的显式基接口(依此类推)的完全可传递的闭包。接口继承其基接口的所有成员。接口成员是通过 I.M 和 I[A] 形式的成员访问和索引访问表达式访问的,其中 I 是接口类型的实例,M 是该接口类型的方法、属性或事件,A 是索引器参数列表。接口可以由类和结构实现。为了指示类或结构实现接口,在该类或结构的基类列表中包含了接口标识符。在实现类或结构中定位接口成员的实现的过程称为接口映射。
fuadam
2008-06-09
打赏
举报
回复
比如你有个接口
interface IMove
{
void Move();
}
对于人,动物来说都可以Move所以
class Person : IMove
[
public void Move()
{
Console.WriteLine("Person move.");
}
}
class Animal: IMove
[
public void Move()
{
Console.WriteLine("Animal move.");
}
}
这是你可以这样调用IMove接口
public Test
{
public void Run(IMove obj)
{
obj.Move();
}
}
如果这是你的需求变了,比如又增加了Car类
class Car: IMove
[
public void Move()
{
Console.WriteLine("Car move.");
}
}
因为你是针对接口编程的,所以你不需要关心Car或者外星人或者火箭类,这既是面向对象的ocp原则,对修改关闭(针对Run方法)对扩展开发(针对新增的汽车,外星人,火箭类)
接口
自动化中pytest.main()
函数参数
设置无效
问题
参考https://blog.csdn.net/weixin_44867493/article/details/123062129。进入到File->Settings->Tools->Python integrated Tools页面。2.不会运行文件夹下所有pytest用例,只会执行当前py文件的pytest用例。
接口
自动化中pytest.main()
函数参数
设置无效
问题
。场景:1.pytest.main()加参数无效。这其实是进入了pytest模式。以上三个
问题
是同一个
问题
。
GO 编程学习
问题
记录
问题
描述: 在输出时出现 {学生d%!(NOVERB)%!(EXTRA int=37) 6 20.318687664732284} 代码: func main() { n := fmt.Sprintf("学生d%", rand.Intn(100)) fmt.Println(n) } 求解答!
参数(Parameters)在前端开发中的使用及相关知识:
函数参数
、回调函数和函数中的
问题
、常见的参数传递类型、传参方式有哪些?axios传参、传参出现参数异常、
接口
管理工具、请求方法
参数(Parameters)是在计算机编程和前端开发中用来传递数值、引用或者设置的特殊变量,它们允许我们向函数或者程序传递信息,以便进行相应的处理。
2
接口
详解_31. 说说 Go 语言里的空
接口
点击上方“Go编程时光”,选择“加为星标”第一时间关注Go技术干货!系列导读01. 开发环境的搭建(Goland & VS Code)02. 学习五种变量创建的方法03. 详解数据类型:整形与浮点型04. 详解数据类型:byte、rune与string05. 详解数据类型:数组与切片06. 详解数据类型:字典与布尔类型07. 详解数据类型:指针08. 面向对象编程:结构体与继承0...
Python踩坑记录:
函数参数
默认值,你确定你重新定义了么?
从内存角度分析,
问题
出现的原因是
函数参数
的默认值在函数定义时就被创建并分配了内存空间,并且在后续函数调用时重复使用了这块内存空间。
C#
111,129
社区成员
642,541
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章