出于某种原因,我遇到了Interfaces的问题.我知道已经发布了100个例子,但显然我不够聪明,无法弄明白......
我有以下界面:
namespace DocStore.Interfaces
{
public interface IResetCategoryControl
{
string CategoryToAdd { set; }
}
}
Run Code Online (Sandbox Code Playgroud)
我想将CategoryToAdd设置为一个值.
这是我想要设置它的课程以及到目前为止我所拥有的课程:
public partial class AddDocumentsDialog : IResetCategoryControl
public string CategoryToAdd
{
set
{
IResetCategoryControl() ireset = new IResetCategoryControl();
ireset.CategoryToAdd = value;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我在AddDocumentDialog类中做错了什么?我不能让那部分工作.
谢谢!
Eroc
Jus*_*ner 11
我不确定你在你的二传手中做了什么......但是以下一行会给你带来问题:
IResetCategoryControl() ireset = new IResetCategoryControl();
Run Code Online (Sandbox Code Playgroud)
首先,在声明变量类型时不要使用括号.其次,您无法直接实例化Interface的实例.为了使该陈述有效,它必须是以下内容:
IResetCategoryControl iReset = new SomeConcreteResetCategoryControl();
Run Code Online (Sandbox Code Playgroud)
但是有一个更大的问题:
从理论上讲,您的类正在实现接口,接口指定您需要CategoryToAdd使用公共setter 调用的属性.该属性应该是在您的类上设置值...而不是另一个类的新实例.
我希望代码看起来像:
public partial class AddDocumentsDialog : IResetCategoryControl
{
private string categoryToAdd;
public string CategoryToAdd
{
set
{
// do some logic to validate the value
categoryToAdd = value;
}
}
}
Run Code Online (Sandbox Code Playgroud)
您可能还想重新考虑您的界面设计,因为通常不鼓励设置属性(支持使用方法,因为仅设置属性表示正在执行一定量的逻辑,并且该值仅由类在内部使用而不是消费者再次访问).
Dan*_*ant 10
您无法实例化接口; 它只是一个契约,而不是一个对象本身.您需要确定合同的含义,并让AddDocumentsDialog实现该合同,执行在设置CategoryToAdd时应该执行的操作.
另外,不建议使用仅限设置的属性.最好使用一种方法.
以下行是有问题的:
IResetCategoryControl() ireset = new IResetCategoryControl();
Run Code Online (Sandbox Code Playgroud)
首先,你需要摆脱第一个括号:
IResetCategoryControl ireset = new IResetCategoryControl();
Run Code Online (Sandbox Code Playgroud)
接下来,您无法实例化接口.接口只是一个必须由具体类实现的签名.
如果您正在查看其他人的代码,请右键单击IResetCategoryControl并选择"查找所有引用"以搜索此接口是否已在某个类中实现.
例如,您可能会发现:
class SomeResetCatControl : IResetCategoryControl
{
}
Run Code Online (Sandbox Code Playgroud)
另一方面,看起来您只需要在setter方法中设置内部私有字段.在这种情况下你应该这样做:
public partial class AddDocumentsDialog : IResetCategoryControl
{
private string _categoryToAdd = "";
public string CategoryToAdd
{
set
{
_categoryToAdd = value;
}
}
}
Run Code Online (Sandbox Code Playgroud)
但正如其他人已经指出的那样,使用只写属性是非常不寻常的,并且表明设计错误.
| 归档时间: |
|
| 查看次数: |
331 次 |
| 最近记录: |