c#从派生类继承或使用接口
在c#中,是否可以从派生类继承?例如,我有以下结构,在C#中这样做合法吗?它可以编译,但我想知道这是否会在以后引起问题,并在某些情况下抛出错误c#从派生类继承或使用接口,c#,class,inheritance,interface,C#,Class,Inheritance,Interface,在c#中,是否可以从派生类继承?例如,我有以下结构,在C#中这样做合法吗?它可以编译,但我想知道这是否会在以后引起问题,并在某些情况下抛出错误 public class A { public string s1 { get; set; } public string s2 { get; set; } } public class B : A { public string s3 { get; set; } public string s4 { ge
public class A
{
public string s1 { get; set; }
public string s2 { get; set; }
}
public class B : A
{
public string s3 { get; set; }
public string s4 { get; set; }
}
public class C : B
{
public C()
{
this.S1 = "A prop";
this.S2 = "A prop";
this.S3 = "B prop";
this.S4 = "B prop";
}
public string s5 { get; set; }
public string s6 { get; set; }
}
我也可以使用接口,但据我所知,接口只是在实现它的任何东西上强制执行契约。因此,我仍然需要实现派生类中的所有属性。我想这并没有比这更多的代码,所以也许这是正确的方法?在这种情况下,我认为C实现IA和IB仅仅意味着C必须实现属性s1、s2、s3和s4。对吗?如果是这样,这是更好的方法吗?如果我在两种情况下都不在,请告诉我。谢谢
interface IA
{
string s1 { get; set; }
string s2 { get; set; }
}
interface IB : IA
{
string s3 { get; set; }
string s4 { get; set; }
}
public class C : IA, IB
{
public C()
{
this.S1 = "A prop";
this.S2 = "A prop";
this.S3 = "B prop";
this.S4 = "B prop";
}
public string s1 { get; set; }
public string s2 { get; set; }
public string s3 { get; set; }
public string s4 { get; set; }
public string s5 { get; set; }
public string s6 { get; set; }
}
这是完全合法的,而且非常有用。查看
按钮的继承树
:
如果需要在类之间提供公共功能,基类通常是最好的方法。这是完全合法的,并且非常有用。查看
按钮的继承树
:
如果您需要在类之间提供通用功能,基类通常是最好的方法。您还有另一个选择~将类a和B抽象化。如果您不想拥有A和B的实例,请将其抽象化或接口化。您也可以选择将类A和B抽象化。如果不希望有A和B的实例,请将其抽象化或接口化 在c#中,是否可以从派生类继承 如果你深入研究一下什么是C及其特性,你会发现C是一种完全面向对象的编程语言,因此答案很明显:是 另一方面,使用严肃编译器的严肃编程语言不允许您执行ilegal操作。如果您可以编译它,那么从语法的角度来看它是有效的(它可能在运行时崩溃,但是storng类型的编译语言不允许您在设计时派生类,在运行时崩溃…) 关于接口。。。 接口不适合模拟继承。它们是契约,它们的用例是确保实现者需要向接口成员提供实现。此外,接口支持继承,但这是为了在其他接口的基础上创建更广泛的契约 在c#中,是否可以从派生类继承 如果你深入研究一下什么是C及其特性,你会发现C是一种完全面向对象的编程语言,因此答案很明显:是 另一方面,使用严肃编译器的严肃编程语言不允许您执行ilegal操作。如果您可以编译它,那么从语法的角度来看它是有效的(它可能在运行时崩溃,但是storng类型的编译语言不允许您在设计时派生类,在运行时崩溃…) 关于接口。。。
接口不适合模拟继承。它们是契约,它们的用例是确保实现者需要向接口成员提供实现。此外,接口支持继承,但这是为了在其他接口的基础上创建更广泛的契约。这实际上取决于您计划如何使用该类。这实际上取决于您计划如何使用该类。非常详细。我喜欢你在interfacesMatias中对“继承”的解释,希望我也能在你的编译器解释上给你一点建议,但我似乎不能。看起来你和我一样理解界面。我现在可以看出,根据肯德尔给出的例子,这是显而易见的。不过,我在谷歌上搜索了“从派生类继承”,找不到明确的示例。可能就在我面前,细节不错。我喜欢你在interfacesMatias中对“继承”的解释,希望我也能在你的编译器解释上给你一点建议,但我似乎不能。看起来你和我一样理解界面。我现在可以看出,根据肯德尔给出的例子,这是显而易见的。不过,我在谷歌上搜索了“从派生类继承”,找不到明确的示例。可能就在我面前。