相关疑难解决方法(0)

接口与基类

我何时应该使用接口,何时应该使用基类?

如果我不想实际定义方法的基本实现,它应该始终是一个接口吗?

如果我有狗和猫类.为什么我要实现IPet而不是PetBase?我可以理解有ISheds或IBarks(IMakesNoise?)的接口,因为那些可以基于宠物放在宠物上,但我不明白哪个用于通用Pet.

language-agnostic oop static-typing interface base-class

754
推荐指数
17
解决办法
15万
查看次数

抽象类和接口之间有什么区别?

假设我们有两个方法M1(),并M2()在接口.抽象类也有两个相同的抽象方法.如果任何类实现了此接口或从抽象类继承,则必须同时实现其中的方法.

所以对我来说,似乎我的场景中的接口或抽象类的行为相同.那么,任何人都可以在这个特定的情况下突出显示这两者之间的区别,并建议是否在这里使用抽象类或接口?

c# oop abstract-class interface

47
推荐指数
1
解决办法
8万
查看次数

抽象类与接口

我对C#中抽象类的使用有点困惑.在C++中,定义一个继承抽象类的类可以遵循的模板是有意义的.但是,在C#中,Interface不具备相同的用途吗?

确实,抽象类可以具有接口不提供的默认实现.因此,如果实现不需要包含在基类中,那么最好选择接口吗?

c#

18
推荐指数
6
解决办法
5844
查看次数

为什么抽象类和接口都存在于C#中?

如果我们可以通过将类中的所有成员都设置为抽象来实现接口功能,那么为什么抽象类和接口都存在于C#中.

是因为:

  1. 接口存在多重继承
  2. 有接口是有意义的,因为对象的CAN-DO功能应放在接口而不是基本抽象类中.

请澄清

.net c# oop

13
推荐指数
3
解决办法
6300
查看次数

XML反序列化'标准化'行结尾,如何阻止它?(.净)

我有一个标有属性的类[XmlText],它接受多行输入.在我的XML文件中,我已经验证了文本内容中的行结尾是非常的"\r\n",与文件的其余部分相同.

我用来反序列化的代码是:

XmlSerializer configSerializer = new XmlSerializer(typeof(WorldList));
string file = "test.xml";

if (File.Exists(file))
{
    using (TextReader r = new StreamReader(file))
    {
        foo = configSerializer.Deserialize(r);
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,在该[XmlText]物业的制定者内部,value已经有"\n"一条线结束.这令人讨厌的主要原因是因为"\n"线路末端没有正确显示TextBox...我不确定哪个部分导致了问题,但我认为这里的某个人可能能够对这种情况有所了解.

c# xml newline xml-serialization

9
推荐指数
2
解决办法
6183
查看次数

C#中的抽象类和接口

可能重复:
接口与基类
接口或抽象类?

大家好,

我只是在思考抽象类和接口,我知道它们在技术上是如何工作的,但我不了解抽象类和接口的实际用途.我的意思是,当我们知道无法创建它的对象时,为什么我们应该使用抽象类,我们不得不扩展这个类来使用它,所以为什么我们不把所有东西都放在派生类中.

接口也是如此,我们必须实现接口,所以为什么我们不把接口中定义的所有方法都放在我们实现接口的类中.

有人可以用一些例子清楚我的怀疑吗?

c#

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

IDisposable究竟需要什么?

可能重复:
正确使用IDisposable接口

我试图通过书籍,互联网和stackoverflow找到我的问题的实际答案,但到目前为止没有任何帮助我,所以希望我可以说明我的问题足够有意义.

一般来说,我总是找到与如何释放内存相同的基本用法,即约.如下,我确实理解代码本身:

public class MyClass : IDisposable
{
    bool disposed = false;
    public void Dispose()
    {
        if (!disposed)
        {
        Dispose(true);
        GC.SuppressFinalize(this);
        disposed = true;
        }
    }

    protected virtual void Dispose(bool disposing)
    {
        if (disposing)
        {
        //free managed ressources
        }
    // free other ressources
    }

    ~MyClass()
    {
        Dispose(false);
    }
}
Run Code Online (Sandbox Code Playgroud)

它完全理解方法的工作方式.但现在我的问题是:为什么我们需要基类IDisposable?在此代码示例,我们定义了一个名为方法Dispose().当我到处读到该方法是IDisposable的一部分时,我们刚刚定义了该方法MyClass,如果我们不实现基类IDisposable或者我错误的假设,这段代码仍然有用吗?

我对C#并不是全新的,但我仍然需要学习很多东西,所以希望有人可以带领我朝着正确的方向前进.我检查了另一篇同样问题的帖子,但找不到它,所以如果它确实存在且它确实回答了我的问题,请带我到那里,我将删除这篇文章.

c# memory idisposable base-class

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

我们可以使用Abstract类代替接口吗

我已经开始担任支持开发人员的职业,但我梦想着为S / W开发人员找到一份工作。我正在用C#学习OOPS。通常让我烦恼的一件事是接口和抽象类的用法。何时使用接口以及何时使用抽象类。我在这个主题上搜索了google,但是无论浏览什么答案,我都看到所有人都在尝试解释什么是抽象和接口,但是我不是按照他们的定义,而是希望看到它们在实际程序中的实际用法。在这里,我想强调一个使用接口的代码,但我认为全部内容也可以使用抽象类进行设计。

如果我将存储库公开为接口,请参见下面的存储库设计模式代码,其中已使用接口

public interface IEmployeeRepository
{
    Employee[] GetAll();
}
Run Code Online (Sandbox Code Playgroud)

那么优势将是我可以有如下所示的多种实现

public class EmployeeRepositoryEF: IEmployeeRepository
{
    public Employee[] GetAll()
    {
        //here you will return employees after querying your EF DbContext
    }
}

public class EmployeeRepositoryXML: IEmployeeRepository
{
    public Employee[] GetAll()
    {
        //here you will return employees after querying an XML file
    }
}

public class EmployeeRepositoryWCF: IEmployeeRepository
{
    public Employee[] GetAll()
    {
        //here you will return employees after querying some remote WCF service
    }
}
Run Code Online (Sandbox Code Playgroud)

请参见上面的代码,该代码具有一个协定方法,GetAll() 并且谁将扩展接口,然后他们可以提供自己的实现。那是优点,但是我的问题是我可以在这里写抽象类而不是接口吗?

假设我有一个抽象类 …

c# oop abstract-class interface

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

实现接口优于继承类的好处

实现接口而不是在.NET中继承类有什么好处?除了多重继承

.net c# oop class

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