作者name2name2 (yang~hi)
看板C_Sharp
标题Re: [问题] 介面实作的问题
时间Sun Jan 15 20:58:11 2017
刚google到这篇
https://msdn.microsoft.com/zh-tw/library/d5x73970.aspx
在Employee的例子中
Employee有Name属性,
对於下方的这个泛型类别
public class GenericList<T>
where T : Employee
public T Data
{
get { return data; }
set { data = value; }
}
....中略...
while (current != null)
{
//The constraint enables access to the Name property.
if (current
.Data.Name == s)
{
t = current.Data;
break;
}
...後略
他底下给的解释是
该条件约束可让泛型类别使用 Employee.Name 属性,
因为型别 T 的所有项目都一定会是 Employee 物件,
或继承自 Employee 的物件。
所以应该 Employee 跟 有继承Employee的类别 都可以被使用or加入
下个例子
class EmployeeList<T> where T : Employee, IEmployee, System.IComparable<T>,
new()
解释
只要使用 条件约束型别 和 其继承阶层架构内的所有型别,
运算和方法呼叫都会受到支援。
看完理解大概如此
介面的部分刚才试了一下
IB:IA,
IB就算没有宣告IA里的方法,
C : IB 还是需要同时实作IB 和IA里的方法 不然会错
所以没宣告一样要实作 >> 不宣告不影响最终效果
http://i.imgur.com/XsYViel.png
再试了下如果在B重复宣告A里的方法,照看到的提示,
这样做好像是会把A的方法屏蔽掉,所以他建议要加new
但我没加new还是build的过,所以或许不加new效果上没差
http://i.imgur.com/oGC4Eme.png
(有错请告知..)
※ 引述《wwe90425 (撒尿牛丸)》之铭言:
: 之前看深入浅出c#有提到
: 如果有继承介面的话,一定要实作介面的方法或属性
: 但这几天上班看到同事写的程式码时
: 却发现没有实作介面类别理的方法,却可以顺利compile没报错
: 想请问一下这是什麽原因?
: 附上程式码:
: 介面:
: public interface IRepository<T> where T : class
: {
: IQueryable<T> GetAll();
: T GetById(int id);
: void Add(T entity);
: void Update(T entity);
: void Delete(T entity);
: void Delete(int id);
: }
: 继承介面的类别:
: public interface IRepoPostSubDtl : IRepository<T_PostSubDtl>
: {
: }
: 另外想请问一下where T : class这是什麽意思
: 请高手帮忙解答,感谢~
--
~
Sent from my
PCMan Combo ~
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 114.36.98.193
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_Sharp/M.1484485100.A.1EE.html
※ 编辑: name2name2 (114.36.98.193), 01/15/2017 21:09:46
2F:推 kalaja: 不同介面但有相同名称方法,也可实作被屏蔽掉的介面。 01/15 21:28
原来如此!
※ 编辑: name2name2 (114.36.98.193), 01/15/2017 21:56:27
3F:推 CloudyWing: 不加new遇到同名就会预设Hide,加new就是告诉编译器要H 01/18 14:58
4F:→ CloudyWing: ide 01/18 14:58