我刚刚了解到,在C#中,您可以从技术上将数据存储在界面中。请参阅以下示例。使用此示例接口和类:
public interface IInterface
{
int id { get; set; }
}
public class ExampleClass : IInterface
{
public int id { get; set; }
}
示例程序。
class Program
{
static void Main(string[] args)
{
var newExample = new exampleClass();
newExample.id = 5;
IInterface exInterface = newExample;
Console.WriteLine(exInterface.id);
Console.ReadLine();
}
}
我的输出为5.为什么?我认为Interfaces不存储除结构之外的任何东西。这种间接存储和引用是否有技术术语?这不是很糟糕,因为这个功能有点隐藏吗?我通常不会想到引用接口上的属性来检索实际数据,这就是对象的用途。
如果格式错误或我需要清除任何内容,请告诉我。谢谢!
答案 0 :(得分:1)
接口不存储任何数据。将接口视为(松散地)描述一个合同,该合同说“任何实现我的类必须提供以下属性/方法”。
此代码
render()
这样做:
创建
var List = React.createClass({ getInitialState: function () { return { deleted: [] }; }, onDelete: function (id) { this.setState({ deleted: this.state.deleted.concat([id]) }); }, render: function() { var Items = this.props.data .filter(item => this.state.deleted.indexOf(item.id) === -1) .map(item => { return ( <Item key={item.id} id={item.id} onDelete={id => this.onDelete(id)}> {item.text} </Item> ); }); return ( <div className="items"> {Items} </div> ); } }); var Item = React.createClass({ render: function() { return ( <div className="item"> {this.props.children} <button className="delete" onClick={() => this.props.onDelete(this.props.id)}>Delete</button> </div> ); } }); ReactDOM.render( <List data={Array of items} />, document.getElementById('content') );
的新实例,并将值5分配给var newExample = new ExampleClass(); newExample.id = 5;
属性。
然而,这段代码
ExampleClass
这样说:
将
id
的实例投射(更改)到接口IInterface exInterface = newExample;
的实例。
这意味着,只要您访问newExample
变量,您就只能访问该界面中定义的那些属性/方法(即使您的类可能定义了其他属性/方法)。
您永远不能创建接口的实例。它总是在创建实现该接口的类的实例的上下文中。如果然后将该实例强制转换为接口,那么您实际上使用的是“最小公分母”类型方法,并限制对该接口定义的内容的访问。