让我们在C#中举个例子
public class Foo
{
public Foo() { }
public Foo(int j) { }
}
public class Bar : Foo
{
}
Run Code Online (Sandbox Code Playgroud)
现在,除了构造函数之外,Foo的所有公共成员都可以在Bar中访问.我做不了类似的事情
Bar bb = new Bar(1);
Run Code Online (Sandbox Code Playgroud)
为什么构造函数不可继承?
UPDATE
我知道我们可以链接构造函数,但我想知道为什么上面的构造无效.我相信它应该是有正当理由的.
我正在制作角色扮演游戏,只是为了好玩,并了解有关SOLID原则的更多信息.我关注的第一件事就是SRP.我有一个"角色"类,代表游戏中的角色.它有Name,Health,Mana,AbilityScores等等.
现在,通常我也会在我的Character类中放置方法,所以它看起来像这样......
public class Character
{
public string Name { get; set; }
public int Health { get; set; }
public int Mana { get; set; }
public Dictionary<AbilityScoreEnum, int>AbilityScores { get; set; }
// base attack bonus depends on character level, attribute bonuses, etc
public static void GetBaseAttackBonus();
public static int RollDamage();
public static TakeDamage(int amount);
}
Run Code Online (Sandbox Code Playgroud)
但是由于SRP,我决定将所有方法都移到一个单独的类中.我将该类命名为"CharacterActions",现在方法签名看起来像这样......
public class CharacterActions
{
public static void GetBaseAttackBonus(Character character);
public static int RollDamage(Character character);
public static TakeDamage(Character character, int amount);
} …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Maven2但我的子项目无法找到父项目.
目录结构如下:
--parent
--pom.xml
--child
--pom.xml
Run Code Online (Sandbox Code Playgroud)
子pom.xml文件如下所示:
<parent>
<groupId>com.mycompany.app</groupId>
<artifactId>myapp</artifactId>
<version>${app.version}</version>
<relativePath>.../parent/pom.xml</relativePath>
</parent>
Run Code Online (Sandbox Code Playgroud)
但是,当我使用maven时,它似乎甚至没有查看相对路径,它似乎尝试从maven存储库下载它.它显然不在回购中.我想让它看一下相对路径.我究竟做错了什么?这是错误消息:
[INFO] Scanning for projects...
Downloading: http://repo1.maven.org/maven2/com/mycompany/app/myapp/${app.version}/myapp-
${app.version}.pom
[INFO] Unable to find resource 'com.mycompany.app:myapp:pom:${app.version}' in reposit
ory central (http://repo1.maven.org/maven2)
[INFO] ------------------------------------------------------------------------
[ERROR] FATAL ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Error building POM (may not be this project's POM).
Project ID: null:web:jar:null
Reason: Cannot find parent: com.mycompany.app:myapp for project: null:web:jar:null for
project null:web:jar:null
Run Code Online (Sandbox Code Playgroud) 我在while循环中搜索特定字符以检查它是否到达文件末尾.
我可以搜索哪个角色?
例如:
Indexof('/n') end of line
Indexof(' ') end of word
???? ---------- end of file??
Run Code Online (Sandbox Code Playgroud) 在Hibernate参考中,有几次说明
Hibernate抛出的所有异常都是致命的.这意味着您必须回滚数据库事务并关闭当前事务
Session.您不能继续使用Session引发异常的操作.
我们的一个遗留应用程序使用单个会话将文件中的许多记录更新/插入到数据库表中.每个记录更新/插入都在单独的事务中完成,然后提交(或在发生错误时回滚).然后为下一条记录打开一个新事务,依此类推.但是在整个过程中使用相同的会话,即使在处理过程HibernateException中陷入了困境.我们在JBoss 4.2上使用Oracle 9i btw和Hibernate 3.24.sp1.
阅读本书中的上述内容,我意识到这种设计可能会失败.所以我重构了应用程序,为每次记录更新使用单独的会话.在使用模拟会话工厂的单元测试中,我可以验证它现在正在为每个记录更新请求新会话.到现在为止还挺好.
但是,我们发现在测试整个应用程序时没有办法重现会话失败(这是一个压力测试btw,还是......?).我们考虑过关闭数据库的监听器,但我们意识到应用程序正在保持一堆连接对数据库开放,并且监听器不会影响这些连接.(这是一个Web应用程序,每晚由调度程序激活一次,但它也可以通过浏览器激活.)然后我们尝试在应用程序处理更新时杀死数据库中的一些连接 - 这导致一些失败更新,但随后应用程序愉快地继续更新其余记录.显然,Hibernate非常聪明,可以在不破坏整个会话的情况下重新打开引擎盖下的断开连接.
所以这可能不是一个关键问题,因为我们的应用程序似乎足够强大,即使是原始形式.但是,这个问题一直困扰着我.我想知道:
HibernateException被抛出后真的变得无法使用(更新:以及有什么症状)?在下文中,我希望EventHandler以一种方式处理EventA,以另一种方式处理EventB,以及以另一种方式处理任何其他事件(EventC,EventD).EventReceiver仅接收对Event的引用并调用EventHandler.handle().当然,总是被调用的版本是EventHandler.handle(事件事件).
不使用instanceOf,有没有办法多态调度(可能通过EventHandler或泛型中的另一个方法)到适当的句柄方法?
class EventA extends Event {
}
class EventB extends Event {
}
class EventC extends Event {
}
class EventD extends Event {
}
class EventHandler {
void handle(EventA event) {
System.out.println("Handling EventA");
}
void handle(EventB event) {
System.out.println("Handling EventB");
}
void handle(Event event) {
System.out.println("Handling Event");
}
}
class EventReceiver {
private EventHandler handler;
void receive(Event event) {
handler.handle(event);
}
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试学习TDD和单元测试概念,我已经看到了口头禅:"红色,绿色,重构".我很好奇你为什么要在测试通过后重构你的代码?
这对我来说没有意义,因为如果测试通过,那你为什么要搞乱代码呢?我也看到TDD咒语就像"只编写足够的代码来使测试通过".
我能提出的唯一原因是,如果要使测试通过绿色,你只是粗略地编写任何旧代码.你只是破解了一个通过测试的解决方案.显然代码很乱,所以你可以清理它.
编辑:
我在另一个stackoverflow帖子上找到了这个链接,我认为这证实了我提出的唯一原因,即"通过"测试的原始代码可以非常简单,甚至是硬编码:http://blog.extracheese.org/2009/ 11/how_i_started_tdd.html
罗伯特马丁说:"一个班级改变的理由永远不应该超过一个".
让我们考虑绑定到View的ViewModel类.ViewModel可能(甚至可能)由彼此不相关的属性组成.对于小视图,ViewModel可能非常一致,但是当应用程序变得更加复杂时,ViewModel将公开可能因不同和无关原因而发生变化的数据.
我们是否应该在ViewModel类的情况下担心SRP原则?
我有这个代码,可以在悬停时更改div的不透明度.
$("#navigationcontainer").fadeTo("slow",0.6);
$("#navigationcontainer").hover(function(){ $("#navigationcontainer").fadeTo("slow",
1.0); // This sets the opacity to 100% on hover },function(){
$("#navigationcontainer").fadeTo("slow",
0.6); // This sets the opacity back to 60% on mouseout });
Run Code Online (Sandbox Code Playgroud)
我希望在将div设置为0.6不透明度之前有一个延迟,我将如何做到这一点
我想知道c ++与objective-c和objective-c ++之间的区别.任何人都可以给我带来差异吗?我们可以使用c ++进行iPhone开发吗?
谢谢,Madan Mohan
c# ×3
java ×2
testing ×2
.net ×1
asp.net ×1
c++ ×1
delay ×1
exception ×1
fadeout ×1
hibernate ×1
inheritance ×1
jquery ×1
maven ×1
maven-2 ×1
mvvm ×1
objective-c ×1
oop ×1
refactoring ×1
session ×1
silverlight ×1
string ×1
tdd ×1
unit-testing ×1
wpf ×1