读书人

接口!接口!该怎么处理

发布时间: 2012-03-27 13:44:24 作者: rapoo

接口!!接口!!
对接口还是不理解:看下面这段程序,希望回答问题的时候能按照我的问题一个一个的解答,万分感谢。如果有好的建议也请提出来,比如哪里能看到类似的书籍和举例。

C# code
public class LPex{  Cplex cplex=new Cplex();  internal static void methodA (IInterf1 face1, IInterf2[][] face2, IInterArray[][] ary)  {    double[] lb={1,2,3};    double[] ub={4,5,6};    IInterf2[] x= face1.GenerateArray(3, lb, ub):     ary[0] = new IInterArray[2]    ary[0][1]=face1.AddLe( something inside  )  }}


这是CPLEX里一段典型的定义 优化方程 变量上下限的语句。让我看不明白的是:
1)方法的参数里有接口的引用还是实现了接口的类的引用。
2)引用这个接口能做什么
3)方法内部第三行程序,接口的引用face1,突然冒出个方法,GenerateArray,竟然又生成了个接口,这是在做什么?
4)第五行 也是, 一个接口的方法能生成另一个接口。这是什么意思?不是说接口的方法只能在类定义的时候才能实现么, 这里还没写就直接用它生成新的接口了, 而且通篇程序任何描述ary[0][1]内方法的语句。

请前辈帮帮新人!!谢谢!!


[解决办法]
接口不能被实例化。。。那么传进来的是什么?
[解决办法]
怎么还不明白?不是跟你说过“方法参数传递的都是实例”吗?

实例是实例,类型是类型...把这个分清楚...

比如...男厕所只允许进男人,这个男人就是个接口参数...设计时鬼知道会进来什么人,运行时进来的管它是什么人...

有男人接口的就按男人的走,该用小便池的用小便池的,该用大便池的用大便池的...你不需要知道他是张三还是李四...没有男人接口的就是异常,你也不需要管他是春哥还是曾哥...
[解决办法]
接口不能被实例化,但是接口需要被实现...一个实例显而易见是被实现了的,它的类型继承实现了某个接口而已...
[解决办法]
探讨

怎么还不明白?不是跟你说过“方法参数传递的都是实例”吗?

实例是实例,类型是类型...把这个分清楚...

比如...男厕所只允许进男人,这个男人就是个接口参数...设计时鬼知道会进来什么人,运行时进来的管它是什么人...

有男人接口的就按男人的走,该用小便池的用小便池的,该用大便池的用大便池的...你不需要知道他是张三还是李四...没有男人接口的就是异常,你也不需要管他是春哥还……

[解决办法]
任何实例...你这逻辑思维怎么做这行啊...

再说一次...实例是实例,类型是类型...把这个分清楚...

人就是人,春哥就是春哥,春哥可以是人,人不能是春哥...春哥可以是抽象的任何概念,但春哥永远都是春哥...
[解决办法]
再举个例子,

打比方上面方法好比一个动作或者说行为——狗狗吃饭(食物 food)

你是调用者,你调用“狗狗吃饭”并给予食物。首先“食物”约定了你给狗狗的是能吃的东西,你给它板砖,

条凳,它都不吃,并且编译错误还咬你。你只好把“狗粮”拿出来给它吃。

狗粮 是 食物 的实例。。。食物 是 狗粮 的接口。
[解决办法]
也就是说,你方法参数声明是接口,但调用方必须传给你这个接口的实例。你不能只从方法这去想,还要联想调用方。接口不能实例化这是游戏规则。
[解决办法]
internal static void methodA (IInterf1 face1, IInterf2[][] face2, IInterArray[][] ary)

加粗的是声明部分,声明的是接口,即“食物”
红色的是实例,即“狗粮”


[解决办法]
god...你的脑筋就不会转转嘛...女人能生女人,那你去给找个“女人”来给我们看看?

抽象的概念仅仅用来分类,实例就是实例,实例具有的抽象类型都只是事先约定的...张三是男人,也可以是公物猿还可以是贪污犯,但张三只是张三而已...所有类型都只是约定,实例只是被约定的...春哥其实不想被人叫哥...

先把抽象和实现分清楚...
[解决办法]
有人会在建男厕所的时候去想jj不能被实例化,而替上帝担心是不是少写了 张三:Ijj 这类的声明呢?

我感觉你的问题是对面向对象完全没概念,在拿面向过程的思维方法在思考面向对象的概念...先去学学OOP,转转脑筋吧...
[解决办法]
男厕所也只挂了个象征男人的牌子,你指望男厕所生孩子吗?
[解决办法]
概念问题就是概念的描述...你应该先去学OOP入门...否则怎么说你都看不懂...

再说一次...实例是实例,类型是类型...类型仅仅是约定,实例如何实例化在哪里实例化与方法参数无关...

教育部规定了只有通过大学考试的才能叫大学毕业生,我公司规定了只招大学毕业生...你不用管这些规定是不是狗P,但这里就这么约定的...

教育部才不管你清华、北大还是野鸡学校,通过考试就发毕业证,这个考试方法传递的就是大学生这么个接口,它才不管你在哪儿实例化,类型是什么...

同样的,我公司HR只关心你有没有大学毕业证,这个招聘方法传递的就是大学毕业证这么个接口,它才不管你在哪儿实例化,类型是什么...

没有人会在建厕所时关心未来的顾客如何出生...公司招人的时候同样不关心...
------解决方案--------------------


你真是执迷不悟啊...建议你没事儿看看哲学类的书,开拓一下思维...

我一开始不是说了吗...接口不能被实例化,但是接口需要被实现...至于谁实现它,如何实现这都不是调用它的方法需要关心的...一个实例已经是实例了,它的类型包括接口当然早就被实现了...

另外接口不能被实例化也仅仅是编程语言的一个约定而已...都是游戏规则...要是有种语言接口可以被实例化那一点也不奇怪...
[解决办法]
是的...否则它就不可能是实例了...

还有,假如这些实例没有实现约定的接口,自然会引发异常...对.NET这种强类型语言来说,编译期间就会出参数类型不匹配错误,跟本就不可能通过编译...

所以方法也就根本不用去关心参数未来的实例究竟有没有实现接口,有没有实例化...因为没有是不可能的...
[解决办法]

探讨
引用:

接口不能被实例化。。。那么传进来的是什么?

我也有同样的问题, 为什么传接口进来?

[解决办法]
I男人 man = new 张三() 或者 李四();

[解决办法]
探讨

引用:

你真是执迷不悟啊...建议你没事儿看看哲学类的书,开拓一下思维...

我一开始不是说了吗...接口不能被实例化,但是接口需要被实现...至于谁实现它,如何实现这都不是调用它的方法需要关心的...一个实例已经是实例了,它的类型包括接口当然早就被实现了...

另外接口不能被实例化也仅仅是编程语言的一个约定而已...都是游戏规则...要是有种语……

[解决办法]






写了几年C# ,表示不知道接口是什么

听了你们的比喻,更加糊涂了,不要为了比喻而比喻

代码也一样,不要为了写代码而写代码

[解决办法]
楼主需要明白的是
接口作为参数时,传进来的实际参数为实现了该接口的类的对象。
接口作为返回值时,返回的是实现了该接口的类的对象。

[解决办法]
探讨
写了几年C# ,表示不知道接口是什么

听了你们的比喻,更加糊涂了,不要为了比喻而比喻

代码也一样,不要为了写代码而写代码

[解决办法]
楼主的结帖率需要提高。
[解决办法]
internal static void methodA (IInterf1 face1, IInterf2[][] face2, IInterArray[][] ary)
{
double[] lb={1,2,3};
double[] ub={4,5,6};
IInterf2[] x= face1.GenerateArray(3, lb, ub):
ary[0] = new IInterArray[2]
ary[0][1]=face1.AddLe( something inside )
}
这里传进来的face1就表示是实现了接口IInterf1的的类。所以face1的方法就是实现类实现的方法。假如借口是模型,则实现类就是用模型做出来的实在的东西了。
[解决办法]
对于vrhero

的接口解析真的很有道理
[解决办法]
探讨

引用:

internal static void methodA (IInterf1 face1, IInterf2[][] face2, IInterArray[][] ary)
{
double[] lb={1,2,3};
double[] ub={4,5,6};
IInterf2[] x= face1.GenerateArray(3, lb, ……

[解决办法]
探讨

引用:

引用:

引用:
模型不就是借口么,所谓模型,当然有模型的框架和规范,任何在该模型下生成的实体物质都要先满足这个框架和规范,然后才可以扩展自己的个性化。所以,你定义一个接口,如果里面有5组函数,那任何实现这个接口的实体都必须要实现这5组函数,缺一不可,这就是所谓"模……

[解决办法]
举个例子
比如先有一个方法
C# code
bool Greater(object obj1,object obj2);
[解决办法]
悲剧啊,不能编辑

自己的类型:
C# code
class MyClass{string ID;public MyClass(string id){ID=id;}}
[解决办法]
传递接口作为参数的目的在于在调用时决定使用哪个具体对象,但方法本身只关系要执行的动作

简单实现如下:
定义运行的接口
inferface IRun
{
void Run();
}

class dog:IRun
{
void Run()
{
Console.WriteLine("狗在跑");


}
}

class cat:IRun
{
void Run()
{
Console.WriteLine("猫在跑");
}
}

class Program
{
static void Main(string[] args)
{
//我只关系要什么去跑,
IRun dog=new dog();
Run(dog);
IRun cat=new cat();
Run(cat);
}

static void Run(IRun object)
{
//我只管跑
object.Run();
}
}
[解决办法]
不能编辑interface写错

手动写代码有这样的问题,无语
[解决办法]

探讨
引用:

接口不能被实例化。。。那么传进来的是什么?

我也有同样的问题, 为什么传接口进来?

[解决办法]
探讨
引用:

internal static void methodA (IInterf1 face1, IInterf2[][] face2, IInterArray[][] ary)
{
double[] lb={1,2,3};
double[] ub={4,5,6};
IInterf2[] x= face1.GenerateArray(3, lb, u……

[解决办法]
看到这就知道楼主已经开窍了。
探讨

引用:

你真是执迷不悟啊...建议你没事儿看看哲学类的书,开拓一下思维...

我一开始不是说了吗...接口不能被实例化,但是接口需要被实现...至于谁实现它,如何实现这都不是调用它的方法需要关心的...一个实例已经是实例了,它的类型包括接口当然早就被实现了...

另外接口不能被实例化也仅仅是编程语言的一个约定而已...都是游戏规则...要是有种语……

读书人网 >C#

热点推荐