对于接口不太理解
public IList<string> GetShipCountries() 中 IList是表示接口对吧
再看,但是函数返回的却是List<string>
List<string> countries =new List<string>();
return countries;
问题:
1.接口到底是什么东西,该什么时候用
2.函数不是要求返回接口吗public IList<string>? 为什么返回的是List<string> ?
谢谢
- C# code
public IList<string> GetShipCountries() { OrderDAL orderDAL = new OrderDAL(); List<string> countries =new List<string>(); if (orders != null && orders.Count > 0) { foreach (Order order in orders) { if (!countries.Contains(order.ShipCountry)) { countries.Add(order.ShipCountry); } } } else { countries = orderDAL.GetShipCountries(); } return countries; }
[解决办法]
2. 因为List<string>实现了 IList<string>?
[解决办法]
1.接口定义了一些行为,是一种约定,实现接口的类,必须提供提供这些行为。
[解决办法]
继承了接口实现.是属于它的子类.
[解决办法]
建议随便找一本C#书,读一下继承和接口相关章节,这是最基本的。
[解决办法]
List<string>是IList<string>的一个具体子类,可以参考"协变和逆变"的关系.接口就是定义了一组行为,然后由子类去实现它.
[解决办法]
当你需要行为和规范的时候,可定义接口
[解决办法]
IList<> 泛型接口 而List<>则实现了该接口
接口:
- C# code
interface IYouYong{ void Method();}class Person:IYouYong{ void Method() { }}然后我们可以这样去定义个接口变量【用该接口的实现类(这里就是Person)进行初始化】IYouYong subject=new Person();subject.Method();
[解决办法]
接口是一种约束,也是一个父类,在父类代替子类做事中,接口作用就很大了,很多设计都源于此
[解决办法]
问题:
1.接口到底是什么东西,该什么时候用
2.函数不是要求返回接口吗public IList<string>? 为什么返回的是List<string> ?
回答:
1.接口是一个定义的规范,是一个抽象的概念,没有具体的实现。大型项目时,一般先定义系统功能所需要的接口,在JAVA或C#中,主要是用于解决类不能多继承的问题来设计的,用了接口就可以实现多继承(类只能继承一个,而接口可以实现很多个)。
2.List<string>实现了IList<string>接口,或者说List<string>是IList<string>的“子类”,这就是“里氏替换”原则,也就是说父类出现的地方,子类一定可以出现。
[解决办法]
看来还是云里雾里,只有实践了才会有更深的理解
[解决办法]
接口定义的是行为,LIST<STRING>来实现ILIST<STRING> 。可以去看看接口和继承这一块的内容 ,属于C#基础知识。
[解决办法]
接口是规范代码 降低藕度
继承接口都类都有了限制这样能做到规范
代码规范后就不容易出现冗余的代码。不过。当然不是什么地方都用接口用不好程序越来越难理解
[解决办法]
9楼回答的很详细。
public IList<string> GetShipCountries()
{
OrderDAL orderDAL = new OrderDAL();
List<string> countries =new List<string>();
//如果更改为IList<string> countries =new List<string>();也许更好。
依赖倒转原则中,提到要面向接口编程,不要面向实现编程。
------解决方案--------------------
1.接口到底是什么东西,该什么时候用
a)接口的本质就是:声明和实现分离
b)对于程序员来说,很多时候是实现接口和使用接口,而不是设计接口
2.函数不是要求返回接口吗public IList<string>? 为什么返回的是List<string> ?
接口也是类型,可以返回其他任何继承了IList的类型的实例
[解决办法]
不大懂,我是初学者,感觉很迷茫
[解决办法]
[解决办法]
[解决办法]
你可以这么理解,某个门呢,只有人能进去。
然后呢,大人可以进,小孩可以进,黑人可以进,白人也可以进;
但是呢,狗是不能进的。
仔细想想
[解决办法]
接口要跟类区分开来
比如机器猫让他继承猫类,孙悟空继承猴类
他们都有同一个方法,叫做变东西,
这时就需要一个定义一个接口来变东西
[解决办法]
好东西,先MARK一下,有时间研究一下
[解决办法]
打个比方
某项目经理对人力资源说:请给我招聘一个c#程序员
人力资源的根据“c#程序员”定义的标准和要求,找到了一个“人”,让项目经理面试。
你认为这个返回的是“人”,所以不符合“c#程序员”这个标准么?
[解决办法]
- C# code
public interface IMobileStorage { void Read(); void Write(); }--------------存储设备------------public class FlashDisk : IMobileStorage { public void Read() { Console.WriteLine("闪存正在读..."); Console.WriteLine("完毕!"); } public void Write() { Console.WriteLine("闪存正在写..."); Console.WriteLine("完毕!"); } }public class MobileHardDisk:IMobileStorage { public void Read() { Console.WriteLine("移动硬盘正在读..."); Console.WriteLine("完毕!"); } public void Write() { Console.WriteLine("移动硬盘正在写..."); Console.WriteLine("完毕!"); } }---------------电脑处理插入进来的存储设备public class Computer { private IMobileStorage _USBStorage; public IMobileStorage USBStorage { get { return _USBStorage; } set { _USBStorage = value; } } public void ReadData() { this.USBStorage.Read(); } public void WriteData() { this.USBStorage.Write(); } } ---------当新的设备方法名与接口定义的不一样的情况 public class NewStorage { public void Rd() { Console.WriteLine("新的存储设备正在读..."); Console.WriteLine("完毕!"); } public void Wt() { Console.WriteLine("新的存储设备正在写..."); Console.WriteLine("完毕!"); } }//通过“适配器”转换成一样的方法名public class StorageAdapter : IMobileStorage { private NewStorage _NewMobileStorage; public NewStorage NewMobileStorage { get { return _NewMobileStorage; } set { _NewMobileStorage = value; } } public void Read() { this.NewMobileStorage.Rd(); } public void Write() { this.NewMobileStorage.Wt(); } } 实现static void Main(string[] args) { //多态性,把各种移动存储设备都看做 IMobileStorage,符合面向接口编程的思想 Computer computer = new Computer(); IMobileStorage flashDisk = new FlashDisk(); IMobileStorage hardDisk = new MobileHardDisk(); //插入闪存 computer.USBStorage = flashDisk; computer.WriteData(); //插入移动硬盘 computer.USBStorage = hardDisk; computer.ReadData(); computer.WriteData(); Console.WriteLine("=========================="); //新的设备由于方法名不一样,所以通过一个“适配器”来转化 StorageAdapter adapter = new StorageAdapter(); adapter.NewMobileStorage = new NewStorage(); computer.USBStorage = adapter; computer.ReadData(); computer.WriteData(); Console.Read(); }
[解决办法]
接口:
1、约束
2、解决多继承的问题
3、可以看作是父类
[解决办法]
比如,在http协议里,你请求了一个动态文件news.aspx,通过反射建立一个news类,这个类就需要转化为接口IHttpHandle,从而实现接口里的方法。
[解决办法]