.net类中静态方法的继承
父类中的静态方法,继承的子类能不能调用?一直在这里有疑惑,即使在下面的测试之后,也只是得到了结论,不明原理。
class ClsParent
{
public static void ShowSth()
{
Console.WriteLine("this is from parent");
}
} class ClsChild : ClsParent
{
//public static new void ShowSth()
//{
// Console.WriteLine("this is from child");
//}
}
static void Main(string[] args)
{
ClsChild.ShowSth();
}
如果将ClsChild里面的ShowSth注释掉的情况下,可以编译通过,鼠标移到Main下面的ShowSth那里,提示ClsParent.ShowSth。说明ClsChild继承了ClsParent之后,也继承了ClsParent的这个公开的静态方法。最终程序运行的结果为"this is from parent"
如果将ClsChild里面的ShowSth取消注释,鼠标移到Main下面的ShowSth那里,将提示ClsChild.ShowSth。此时的运行结果为"this is from child"。
一直有错误的理解,静态方法是不能继承的,为函数独有。现在看来是错的。
静态函数的继承要注意几点:
1. 尽量用关键字new来隐藏父类的静态方法,为了程序的稳定,避免以后.net升级可能带来的不必要麻烦。
2. 因为静态方法是类相关的,与具体的实例无关。所以不能用ClsParent.ShowSth来执行子类的函数,这点要留意。和非静态函数使用的区别。
.net的继承到底是什么样的数据逻辑流向,抱歉不能给出理论的解释。
纯个人的理解来堆砌的文字,能力有限,如果错误请更正。另外,如果有对这方面的理论知识很清楚的,望留言指点。
转载请注明出处:http://www.cnblogs.com/icyJ
.net类中静态方法的继承的更多相关文章
- koa 基础(十八)es6中的类、静态方法、继承
1.app.js /** * es6中的类.静态方法.继承 */ // 定义Person类 class Person { constructor(name, age) { /*类的构造函数,实例化的时 ...
- koa 基础(十七)原生 JS 中的类、静态方法、继承
1.app.js /** * 原生 JS 中的类.静态方法.继承 * es5中的类和静态方法 */ function Person(name, age) { // 构造函数里面的方法和属性 this. ...
- PHP 类中静态方法调用非静态方法
静态方法调用非静态方法: 在类中静态方法中,需要实例化对象,然后再调用类中的方法 非静态方法调用静态方法: 可以self 或者 类名加::的形式调用 如下面的案例: <?php class A{ ...
- Typescript中的类 Es5中的类和静态方法和继承(原型链继承、对象冒充继承、原型链+对象冒充组合继承)
<!doctype html> <html> <head> <meta charset="utf-8"> <meta name ...
- Hibernate的实体类中为什么要继承Serializable?
确切的说应该是对象的序列化,一般程序在运行时,产生对象,这些对象随着程序的停止运行而消失,但如果我们想把某些对象(因为是对象,所以有各自 不同的特性)保存下来,在程序终止运行后,这些对象仍然存在,可以 ...
- 第7.17节 Python类中的静态方法装饰器staticmethod 定义的静态方法深入剖析
第7.17节 Python类中的静态方法装饰器staticmethod 定义的静态方法深入剖析 静态方法也是通过类定义的一种方法,一般将不需要访问类属性但是类需要具有的一些能力可以静态方法提供. 一 ...
- python类的静态方法和类方法区别
先看语法,python 类语法中有三种方法,实例方法,静态方法,类方法. # coding:utf-8 class Foo(object): """类三种方法语法形式&q ...
- C++ 中三种继承方式的理解
一.公有继承(public inheritance) 1.概念:当类的继承方式为公有继承时,基类的公有成员和保护成员的访问属性在派生类中不变,而基类的私有成员不可以直接访问. 实验一下: 我们用代 ...
- Es5中的类和静态方法 继承
Es5中的类和静态方法 继承(原型链继承.对象冒充继承.原型链+对象冒充组合继承) // es5里面的类 //1.最简单的类 // function Person(){ // this.name='张 ...
随机推荐
- windbg分析执行在64位环境下的32位程序的dump
windbg命令例如以下 1. .load wow64exts 2. !sw 3. ~* kvnf
- ElasticSearch 数据增删改实现
前言 本文介绍 ElasticSearch 增加.删除.修改数据的使用示例.通过Restful 接口和 Python 实现.ES最新版本中有Delete By Query 和 Update By Qu ...
- mysql 中 delete 子查询的限制
1 DELETE FROM tablename 中的 tablename 不能起别名 delete ; [Err] - You have an error in your SQL syntax; 2 ...
- django shortcuts 详解
django中为了方便web的开发.定义了许多有用的shortcut .由于shortcut带来的方便用文字描述是有点苍白的.所以在这里打算用一些例子来说明 一.一个hello world 的例子: ...
- Maven .m2\repository\jdk\tools\1.7 missing
在pom.xml文件中加入: <dependency> <groupId>jdk.tools</groupId> <artifactId>jdk.too ...
- Viola-Jones人脸检測
OpenCV中有一个基于树的技术:Haar分类器,它建立了boost筛选式级联. 它能够识别出人脸和其它刚性物体. 对于检測"基本刚性"的物体(脸,汽车,自行车,人体等)这类识别任 ...
- Pipeline 与 xargs
Pipeline 与 xargs Pipeline与命令行參数 应用程序接收输入的两种方式: 命令行參数 输入字符串被当成參数,通过int main(int argc, char **argv), 中 ...
- 运行jar乱码问题
请使用 1.java -jar -Dfile.encoding=utf-8 dapao.jar 2.请使用URLDecode,URLEncode 3.请使用unicode编码格式 bat运行当前目录 ...
- 腾讯云服务器 设置ngxin + fastdfs +tomcat 开机自启动
在tomcat中新建一个可以启动的 .sh 脚本文件 /usr/local/tomcat7/bin/ export JAVA_HOME=/usr/local/java/jdk7 export PATH ...
- 转:Math: Math.atan() 与 Math.atan2() 计算两点间连线的夹角
我们可以使用正切操作将角度转变为斜率,那么怎样利用斜率来转换为角度呢?可以利用斜率的反正切函数将他转换为相应的角度.as中有两个函数可以计算反正切,我们来看一下. 1.Math.atan() Math ...