如:
有一个接口 public interface IEntityBase
{
string Id { set;get; }
}在一个类中实现这个接口 public class c1 : IEntityBase
{
string Id
{
set
{
return "aaaa";
}
}
}下面是在另一个类中调用 要求得到ID的值为 在c1中重写的值也就是 "aaaa" public class c2
{
string GetID()
{
// 如果这样写 IEntityBase i=new c1()
return i.id;
// 那么必须知道在哪里实现了 id ,
}
}
有一个接口 public interface IEntityBase
{
string Id { set;get; }
}在一个类中实现这个接口 public class c1 : IEntityBase
{
string Id
{
set
{
return "aaaa";
}
}
}下面是在另一个类中调用 要求得到ID的值为 在c1中重写的值也就是 "aaaa" public class c2
{
string GetID()
{
// 如果这样写 IEntityBase i=new c1()
return i.id;
// 那么必须知道在哪里实现了 id ,
}
}
解决方案 »
- |ZYCWPF| 在MVVM中,如何绑定InkCanvas的Strokes,绑定后我在后台取到的值都为null 谢谢
- 哪里有睿智汇海.Net培训教程WCF入门
- 判断字符串变量str是否为空的一下三种方法哪个性能更优:a、str=="";b、str==String.Empty;c、str.Length==0;?请问原因是什么??
- 怎么理解“TCP协议想放弃一个已经存在的连接“
- 小问题,有过开发经验的都应该可以解决.
- 紧急求救:请教如何把Ifontdisp转换为Font
- (100分).NET的奇怪问题,大家看看
- 求助:Win8语音库剥离解决方案
- 一个疑问?
- 请问大侠们有没有硬盘数据恢复的代码?非常感谢!急~~~
- ToolStripDropDown 显示问题
- 求解变量声明在循环外与内,有什么不同,谁能从底层解释一下这二个方法。
或把3者置于同一namespace下
c1在另一个工程项目中是不是要用委托啊 .....
public class c1 : IEntityBase
{
public string Id
{
get
{
return "aaaa";
}
set { }
}
}
public interface IEntityBase
{
string Id { set; get; }
}
public class c2
{
public string GetID()
{
IEntityBase i = new c1();
return i.Id;
}
}
// 如果这样写 IEntityBase i=new c1()
return i.id;
// 那么必须知道在哪里实现了 id ,也就是说 不知道是在哪个类里实现的 可能是c1,也可能是c2....
.net框架里有好多这样的类像MembershipProvider类,它是个 abstract类,
不知道你有没有写过类似继承MembershipProvider类类,比如说我在x1中调用MembershipProvider中的getname()他会根据他的继承类 中重写的内容执行代码,重写类中是 return "1";那么在x1中调用getname()返回的就是1
具体为什么 简单的和你说 你new的是 C1就是 C1的 和引用没关系 只和实例有关
你看看你的答案和我的为题(最后一段代码)有什么区别啊
我也知道得那么做。可是C1 怎么就知道是C1 这是一个父类调用子类的也就是说"C1"不是固定的
不管你是 C几, 你new的是谁 他就是谁。
接口的声明 只决定你能调用到后面实例 也就是c几的方法也就是说 父类的声明只能调用子类实现父类的方法和属性,而子类添加的属性和方法调不到而已
简单的说就是在调用 IEntityBase 接口下面属性id的时候 不知道 有C1这个类或是 的确有这样一个类可是名字不叫C1
如果什么都没有是null的 编译都过不去
使用反射确定这个类是否继承了IEntityBase
之后再创建对象.
EditBox editBox = new EditBox();
IControl control = editBox;
IDataBound dataBound = editBox;
在无法静态知道某个实例是否实现某个特定接口的情况下,可以使用动态类型强制转换。例如,下面的语句使用动态类型强制转换获得对象的 IControl 和 IDataBound 接口实现。由于该对象的实际类型为 EditBox,此强制转换成功。
object obj = new EditBox();
IControl control = (IControl)obj;
IDataBound dataBound = (IDataBound)obj;
public interface IEntityBase
{
string Id { set;get; }
} public class c1 : IEntityBase
{
string Id
{
set
{
return "aaaa";
}
}
} public class c2
{
string GetID(object value)
{
if (value is IEntityBase)
return (value as IEntityBase).Id;
throw new Exception("不是一个有效的 IEntityBase 对象!");
}
}