笨木头与游戏开发
只有你足够强,别人才会和你讲道理。
文章:
280
浏览:
3,004,978
博主:
笨木头
关注:
Unity、Net Core、Blazor
邮箱:
musicvs@163.com
首页
|
留言
分类目录
其它
Cocos2d-x
创业路
Android
LGame
C++
Unity3D
近期评论
自学Unity的小白
在
[Game Framework...
分享遇到的问题,旧版unity项目升级到高版本时出现的vs没有解决方案,不能高亮...
Cultist
在
留言...
回复给
迷途的老菜鸟
多谢,这个好啃多了...
迷途的老菜鸟
在
留言...
回复给
笨木头
谢谢大佬的分享,可以学到很多...
笨木头
在
留言...
回复给
迷途的老菜鸟
哈哈,没有更好玩的,就是做其他领域的开发去了。...
迷途的老菜鸟
在
留言...
所以笨木头大佬现在研究啥了? 不做游戏开发,还有更好玩的?...
笨木头
在
[笨木头“创2”路]No.10...
回复给
kkk
唉,我这不知道咋的,年龄越大,感悟越少,都不知道写点什么好...
[GameFramework]杂记001-关于protected internal visual void OnInit()函数
笨木头 2018-06-28 17:07
Game Framework
阅读
(6853)
评论
(2)
转载请注明,原文地址:
http://www.benmutou.com/archives/2667
文章来源:
笨木头与游戏开发
更多GF教程和实例:
https://github.com/mutouzdl/gameframework_demo.git
转载请注明,原文地址:
http://www.benmutou.com/archives/2667
文章来源:
笨木头与游戏开发
在GameFramework中,大家可能经常遇到一个错误(比如把我的代码放在Unity5.x里运行时),这个错误和类似protected internal visual void OnInit的函数重写有关。
刚好今天有位朋友问了我一个问题,所以我就专门再仔细看了看。
首先,internal代表只有同一个程序集下的代码可以访问,这个是前提,这个语法大家应该都知道。
问题就在于protected,protected代表子类可以访问。
于是,大家是不是就认为,protected internal只能在同一个程序集的子类里访问呢?
不是的,不是的,并不是的!
它代表的是以下两种情况:
1.在同一个程序集下,可以访问OnInit函数
2.在同一个程序集下,可以重写这个函数,但是必须这样写:protected internal override void OnInit
3.在不同的程序集下,可以重写这个函数,而且可以忽略internal:protected override void OnInit
(旁白:说好的
…
两种情况
…
呢?!)
关键是第三种,很奇怪是不是?
这是因为:protected和internal是或的关系,是或的关系!
用韩语来表达就是:they are or 的关系!(旁白:韩语你mei!)
也就是说,要么可以在子类访问,要么只能在同一程序集访问,这很尴尬,很冲突。
所以,为什么解决这种冲突(
以下内容是我瞎编的,如果刚好编对了,那就太好了
),定了这样的规则:
在同一个程序集下,internal是可以产生作用的,OnInit可以被调用。如果你要重写这个函数,那就把我internal带上,保留只能同一个程序集访问这个规则,同时也让protected生效(子类可以调用),其实这里internal的规则已经覆盖了protected了。
在不同的程序集下,protected代表可以在子类访问,可是internal怎么办呢?没关系,internal仍然规定了OnInit只能在同一个程序集直接访问。但是,如果重写OnInit的话,protected的作用可以生效——在子类中可以调用OnInit。
总结一句话,把冲突的地方抛弃,保留各自的规则。
参考资料:
https://cboard.cprogramming.com/csharp-programming/146193-protected-internal-virtual-vs-protected-override.html
https://haacked.com/archive/2007/10/29/what-does-protected-internal-mean.aspx/
0
上一篇
GF_JustOneLevel食用指南002:主要功能
下一篇
GF_JustOneLevel更新,V1.0.1版本发布说明
2 条评论
Fly
2018-06-29 09:11:30
好晕……就是如果在不同程序集,得重写才能在子类调用,否则不能在子类调用?
0
回复
博主
笨木头
2018-06-29 13:25:44
有protected修饰,只要是子类就能调用了,不管有没有重写。
主要是要理解,protected和internal是or的关系。
0
回复
发表评论
发表评论
粤ICP备16043700号
本博客基于
Blazor
和
Ant Design Blazor
开发