小编Ali*_*aru的帖子

不在接口中的类方法

我有一个简单的c#问题(所以我相信).我是这个语言的初学者,我遇到了关于实现它们的接口和类的问题.问题是

我有接口 iA

interface iA
{
  bool method1
  bool method2
  bool method3
}
Run Code Online (Sandbox Code Playgroud)

和3个实现接口的类:class B,CD

class B : iA
{
  public bool method1
  public bool method2
  public bool method3
}
Run Code Online (Sandbox Code Playgroud)

如果B类有另一个不在界面中的方法,那么让我们说method4(),我有以下内容:

iA element = new B();
Run Code Online (Sandbox Code Playgroud)

然后我会用:

element.method4();
Run Code Online (Sandbox Code Playgroud)

我会得到一个错误,说我没有method4()第一个类型的参数iA.

问题是:我是否可以拥有接口类型的对象并使用类进行实例化,并让该对象从类中调用一个方法,该方法不在接口中?

我想出的解决方案是在接口和派生类之间使用抽象类,但IMO会将接口放在范围之外.在我的设计中,我想只使用接口和派生类.

c# methods interface

12
推荐指数
1
解决办法
196
查看次数

序列化和反序列化类中的静态成员?

我在我的简单项目中遇到了问题.我想建立一个书店管理员来跟踪商店里的书籍(来自供应商的账单)以及出售时离开商店的书籍.为了跟踪书籍,我将它们存储在字典中,其中是书籍的ISBN.它看起来像这样:

Dictionary<string,IBook> BOOKS;
Run Code Online (Sandbox Code Playgroud)

另外我需要另一本字典来跟踪来自不同供应商的账单.那个看起来像这样:

Dictionary<string,Supplier> SUPPLIERS;
Run Code Online (Sandbox Code Playgroud)

这种情况下的关键是供应商名称.每个供应商都有一个账单清单作为数据字段:

[Serializable]
public class Supplier
{
    private List<Bill>  supplierBills;
    private string      supplierName;
    ....
}
Run Code Online (Sandbox Code Playgroud)

现在每个比尔看起来像这样:

[Serializable] 
public class Bill 
{
    private List<IBook> billBooksList;
    private double      billTotalDue;
    private DateTime    billCreationDate;
    private DateTime    billDueDate;

    public static int   billNumber = 0;
}
Run Code Online (Sandbox Code Playgroud)

当我关闭应用程序时,我序列化了BOOKS字典和SUPPLIERS字典.当我打开它时,会发生反序列化.我的问题与Bill类中的静态成员billNumber有关.它不会序列化.每次打开应用程序时,变量都会重置为0.

我试图使用如何序列化和反序列化静态成员的示例,但我没有从直接类(在我的例子中是Supplier类)序列化静态成员.

任何帮助表示赞赏:)

c# serialization dictionary

1
推荐指数
1
解决办法
865
查看次数

标签 统计

c# ×2

dictionary ×1

interface ×1

methods ×1

serialization ×1