C#接口作参数的问题

ruoshuiyi 2010-06-22 03:34:47
我有三个文件
1.接口
public interface IA{ }
2.实现接口的类
public class A: IA
{
private IA _ia;
public A(IA ia)
{
_ia= ia;
}
.....其他实现
}
3.实例化A类的类
public class B
{

}
我想问我怎么在B类中实例化A并且调出A中的方法.
因为构造函数中的参数是接口吗..所以不知道要怎样实例化A类..麻烦高手教教我吧..
...全文
314 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
Mars.xj 2010-06-23
  • 打赏
  • 举报
回复
public interface IA
{
void dosomething();
}

public class A:IA
{
public void dosomething()
{
}
}

public class B
{
IA a=new A();
a.dosomething();
}

是要问这个意思吗?
ruoshuiyi 2010-06-23
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 s8975565 的回复:]
C# code

public class A:IA
{
private IA _ia;
public A(IA ia)
{
_ia = ia;
}
public A()
{

}
}
……
[/Quote]
恩.这种方法我试过了.但是没成功.
ruoshuiyi 2010-06-23
  • 打赏
  • 举报
回复
昨天一直在处理IA的问题.忽略了A是继承自IB和IC而不是IA
所以从新把3个类贴上来一下..
1.接口
public interface IA{ }
2.实现接口的类
public class A: IB,IC
{
private IA _ia;
public A(IA ia)
{
_ia= ia;
}
.....其他实现
}
3.实例化A类的类
public class B
{

}
jshi123 2010-06-23
  • 打赏
  • 举报
回复
A a = new A(null);
这样应该可以编译,不过大概没有什么实际意义。

看上去你的这个IA接口像是个工厂模式里的产品类的接口,仔细看下文档,看看如何正确才能正确使用
s8975565 2010-06-23
  • 打赏
  • 举报
回复

private IA _ia;
public static IA Ia
{
set;
get;
}
public

我感觉这麽用才舒服
s8975565 2010-06-23
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 s8975565 的回复:]
C# code

public class A:IA
{
private IA _ia;
public A(IA ia)
{
_ia = ia;
}
public A()
{

}
}
……
[/Quote]
但是我不明白为什么要这麽做呢? A既然继承自IA 那么实现它提供的方法就可以了啊?
s8975565 2010-06-23
  • 打赏
  • 举报
回复

public class A:IA
{
private IA _ia;
public A(IA ia)
{
_ia = ia;
}
public A()
{

}
}

public interface IA
{

}

public class B
{
public void Test()
{
IA ia = new A();
A a = new A(ia);
}
}

这样行吗?
zw_548498 2010-06-23
  • 打赏
  • 举报
回复
帮顶,关注中~
ruoshuiyi 2010-06-23
  • 打赏
  • 举报
回复
1.接口
public interface IA{ }
2.实现接口的类
public class A: IB,IC
{
private IA _ia;
public A(IA ia)
{
_ia= ia;
}
.....其他实现
}
3.实例化A类的类
public class B
{

}
ledmhcc 2010-06-23
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 ruoshuiyi 的回复:]
昨天一直在处理IA的问题.忽略了A是继承自IB和IC而不是IA
所以从新把3个类贴上来一下..
1.接口
public interface IA{ }
2.实现接口的类
public class A: IB,IC
{
private IA _ia;
public A(IA ia)
{
_ia= ia;
}
.....其他实现
}
3.实……
[/Quote]
这样的话
public class B
{
IA ia = new B()//B实现了IA接口
A a = new A(ia);
}
这种实现不行吗?
ledmhcc 2010-06-22
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 ruoshuiyi 的回复:]
A里面的实现:
public UerEntity GetUser(string id)
{
return _ia.Get(id);
}
public UerEntity GetUserByUserName(string userName)
{
return _ia.Get(userName);
}

所以我的构造还是要用接口传递进去参数的.不然更无……
[/Quote]
这个和实现IA接口没关系吧,你沿用
private IA _ia;
public A(IA ia)
{
_ia= ia;
}
好了
如果你要用到IA对象里的方法
只要private IA _ia; 改为public
我的意思是你A本身不要实现IA接口
IA B = new B();
A a = new A(B);
这样用,感觉比较舒服
ruoshuiyi 2010-06-22
  • 打赏
  • 举报
回复
A里面的实现:
public UerEntity GetUser(string id)
{
return _ia.Get(id);
}
public UerEntity GetUserByUserName(string userName)
{
return _ia.Get(userName);
}

所以我的构造还是要用接口传递进去参数的.不然更无法实例化我的_ia
ledmhcc 2010-06-22
  • 打赏
  • 举报
回复
纠结的关键是你A实现了IA接口,不可以用别的类去实现。然后A只负责生成个IA的实体出来?
ruoshuiyi 2010-06-22
  • 打赏
  • 举报
回复
诶.如果是构造函数不带参数的话.我知道该怎么做.但是问题是公司下发的模板啊..就是在构造函数里传了接口.我也没有办法..在A里面我试过自己定义一个默认的构造但是还是不行..
ACDINO 2010-06-22
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 efaye_yang 的回复:]
修正一下:
1、你对IA的实现类,最好加上不带参数的构造函数。
2、不要用接口做参数,因为接口没有提供实际方法,也就是接口类型的参数没有实例化,是无法使用的。
整个程序如下:

C# code

public interface IA{ }
public class A: IA
{
public A()
{
}
}
public……
[/Quote]

ding
efaye_yang 2010-06-22
  • 打赏
  • 举报
回复
修正一下:
1、你对IA的实现类,最好加上不带参数的构造函数。
2、不要用接口做参数,因为接口没有提供实际方法,也就是接口类型的参数没有实例化,是无法使用的。
整个程序如下:
 
public interface IA{ }
public class A: IA
{
public A()
{
}
}
public class B
{
IA _ia=new A();
}


efaye_yang 2010-06-22
  • 打赏
  • 举报
回复
IA _B=new A;
mapserver 2010-06-22
  • 打赏
  • 举报
回复
如果没有别的类上的方法能创建一个IA的实例,或者别的类继承于IA,那么将是一个死结。

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧