c#如何在父类(或是接口)当中定义一个子类必须要重写的字段(属性)?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c#如何在父类(或是接口)当中定义一个子类必须要重写的字段(属性)?相关的知识,希望对你有一定的参考价值。

抽象父类中:
public absctrat string 属性名 get;set;

接口中:
string 属性名 get;set;

=======
以上示例是string类型的属性,可按你的情况修改类型.
以上示例中的属性都是可读可写属性.

如果是只读属性,就应该修改为:

抽象父类中:
public absctrat string 属性名 get;

接口中:
string 属性名 get;

=============

如果是只写属性,就应该修改为:

抽象父类中:
public absctrat string 属性名 set;

接口中:
string 属性名 set;

===========
不存在不可读又不可写的属性.
参考技术A 据我所知,
可以在抽象类或接口定义没有方法实现的方法,而方法中可以定义参数,这种参数是一种要重写的,但是名称可以不同。。
没有听过可以定义必须重写的字段。。
你听过,告诉咯。。
参考技术B 用接口,定义代码如下:

public interface Father

string Abc

get;
set;


在子类中必须重写Abc属性。
参考技术C 定义抽象类,并在抽象类中定义抽象方法abstract

虚方法是不必须重写的(在派生类中)

而抽象方法在派生类中必须被重写

public abstract class AB

public abstract void A();
public abstract void B();


public class C : AB

public override void A()

//DO SOMETHING;




如果这样的话编译器会出错,因为B方法没有被重写!

看楼下的吧,我又看错题目了!
参考技术D 父类定义成抽象类abstract
public abstract string YY

get;

set;



接口
string YY

get;

set;


属性在C#其实只是一种特殊的方法而已
完全可用方法代替。

如何理解“子类不能降低父类中定义的方法的可访问性”这句话?

如果一个方法在父类定义为public,在子类中必须也定义为public。
如果一个方法在父类定义为public,“在子类中定义为protected”是如何降低父类中定义的方法的可访问性从而不被允许的?麻烦举个例子。谢谢!

首先你需要理解先Java中的访问控制修饰符,public,protected,private,friendly(Java中没有修饰符的情况下为friendly)。
public,private,protected以及暗示性的friendly。若未明确指定其他关键字,则默认为后者。这些关键字的使用和含义都是相当直观的,它们决定了谁能使用后续的定义内容。“public”(公共)意味着后续的定义任何人均可使用。而在另一方面,“private”(私有)意味着除您自己、类型的创建者以及那个类型的内部函数成员,其他任何人都不能访问后续的定义信息。private在您与客户程序员之间竖起了一堵墙。若有人试图访问私有成员,就会得到一个编译期错误。“friendly”(友好的)涉及“包装”或“封装”(Package)的概念——即Java用来构建库的方法。若某样东西是“友好的”,意味着它只能在这个包装的范围内使用(所以这一访问级别有时也叫作“包装访问”)。“protected”(受保护的)与“private”相似,只是一个继承的类可访问受保护的成员,但不能访问私有成员。
参考技术A 父类:FatherClass
public void speak
//xxx

子类:SonClass
private void speak
//xxx

调用:
FatherClass fc = new SonClass();
fc.speak();
由于多态性,fc.speak()实际上调用的是子类的方法,父类不能访问子类方法,肯定会报错
=======可能理解有误追问

可不可以这样理解?在FatherClass和SonClass存在继承关系的情况下,SonClass的speak()覆盖了父类的方法,而在SonClass的speak()访问修饰符为private的情况之下,SonClass的子类便继承不了speak(),那么在继承链上从SonClass的子类开始一直往下的类都无法继承speak(),这和继承规则有矛盾,所以,这样不被允许。
可对?有劳指教……

追答

嗯,可以

本回答被提问者采纳
参考技术B 这主要是子类中覆盖父类的方法时,应注意的问题。如父类有一个说话的方法public void speak(){System.out.println(“aaa”);},继承他的子类中想重写该方法,则定义public void speak()System.out.println(“bbb”);,这时,该方法不能声明为private或protected或默认的。追问

假如父类方法为public,子类为private或protected的话,子类方法是如何导致降低父类中定义的方法的可访问性的?可否举个例子?(假设子类方法可以降低父类方法的可访问性)

以上是关于c#如何在父类(或是接口)当中定义一个子类必须要重写的字段(属性)?的主要内容,如果未能解决你的问题,请参考以下文章

子类的实例化过程

继承和多态

C#在父类中获取子类的类名

C#之封装继承多态初识

设计模式解密- 模板方法模式

对接口的理解