假设我有两个应用程序,每个应用程序都有一个单独的EAR文件,它们在同一个JTA事务中相互调用.如果两者共享同一个实体管理器,它们是否会获得相同的会话,或者每次都创建新会话?
我有一个带有属性Value的抽象基类A,以及两个派生类W和R.总是可以读取Value(并且方法总是相同的 - 读取存储的值),所以我将getter直接放到A .
但是写入Value并不总是可行,因此有W和R.W也提供了一个setter,而R没有 - 它只依赖于来自A的特性.
问题是,无论我尝试什么,我都无法在C#中实现这样的设计.我不能覆盖W中的Value属性,因为基类中没有setter(并且没有,因为向基类添加setter意味着它也会"泄漏"到R).
我在A中添加了一个引发异常的setter.在WI覆盖设置器中,在RI中什么都不做.
这是丑陋的,因为设计,因为R中的setter是公共的,因为现在这样的代码编译:
R reader;
reader.Value = 5;
Run Code Online (Sandbox Code Playgroud)
那么如何在基类中创建一个只有getter的属性,并在派生类中添加一个setter?
因为总有至少一个好奇的灵魂,我解释 - 这些类是数据持有者/经理.R类是动态数据"持有者" - 它使用给定的公式计算值(类似于Lazy Eval类).大多数东西在W和R中很常见 - 过滤值,发送通知等等.唯一的区别是在R中你不能直接设置值,因为公式是单向的(类似于WPF转换器只有一个方法定义,转换).
感谢Marc我解决了这个问题,这里是代码:
abstract class A {
public int Value { get { return ... } }
}
class R : A { }
class W : A {
new public int Value {
get { return base.Value; }
set { .... }
}
}
Run Code Online (Sandbox Code Playgroud)
与Marc版本的不同之处在于缺少基类中的setter(这是问题的全部要点),与我的解决方法的区别在于隐藏属性,而不是覆盖它.小而重要的一块.
谢谢Marc的启示:-).
我想制作一个支持多种语言的网络应用程序(英语,德语,法语......)我还想检测默认使用的浏览器语言,并让用户选择语言.
这样做的最佳方法是什么?
谢谢,
拉杜
平台C#,Dot net 4.0
var city0 = DataCache.GetAllCities().Where(c => c.GeoName.Contains("Dubai")).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)
变量Duabi存在于数据中,它返回城市对象
var city1 = DataCache.GetAllCities().Where(c => c.CityID== 23804982) .FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)
数据中不存在id 23804982,这将返回null对象
var city2 = DataCache.GetAllCities().Where(c => c.GeoName.Contains("WrongCityName")).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)
变量WrongCityName 在数据中不存在,这将返回以下错误.
你调用的对象是空的.
[编辑]我在上次执行查询时收到错误.不是在我评估city2时
我正在尝试为实现的只读集合编写一个抽象基类IList.这样的基类应该实现set-indexer来抛出a NotSupportedException,但是将get-indexer保留为abstract.C#是否允许这种情况?这是我到目前为止所拥有的:
public abstract class ReadOnlyList : IList {
public bool IsReadOnly { get { return true; } }
public object this[int index] {
get {
// there is nothing to put here! Ideally it would be left abstract.
throw new NotImplementedException();
}
set {
throw new NotSupportedException("The collection is read-only.");
}
}
// other members of IList ...
}
Run Code Online (Sandbox Code Playgroud)
理想情况下ReadOnlyList,能够实现setter,但保留getter摘要.有没有允许这个的语法?
我想在Scala项目中使用代码覆盖,使用Simple Build Tool作为构建工具.在这个项目中使用的最好的是什么.(我是这些技术的新手.)任何人都可以告诉我如何在我的项目中配置代码覆盖率.如果你能提供一个帮助我理解事情的例子.
所以我是一个源控制白痴,所以请用这个清单幽默我.
我终于决定在下一个项目中使用Mercurial + TortoiseHg +(VS2010 + HgSccPackage)+ Kiln.
我阅读http://hginit.com/并且我玩了很多,但我对源代码控制知之甚少,所以我不想在这里犯错误,我目前的项目是我最大和最有价值的一个然而.
所以这是我的清单:
创作:
我在这里遇到的一个问题是.我在HgScc中找不到相应的Add Files,我注意到当我从VS-IDE添加新文件时,它没有源控件的图标.(它没有添加到mercurial?)
所以我最终通过IDE添加文件,他们没有检查.然后经过几次提交(以及其他我不记得的事情),我注意到有一个额外的分支或者其他东西:

现在,如果我去尝试推动我得到"(did you forget to merge? use push -f to force)".(是的,我击中了传入,我在即将发生的变化中没有)
无论如何,只是一个游乐场,**我刚刚意识到使用TortoiseHG - >每次我从VS修复文件创建文件时添加文件?**(或者这里有更好的方法吗?)
分枝:
所以我对命名分支有点困惑,但是Kiln作为他们自己的分支/克隆东西.我在这里阅读说明
所以我在这里看不到任何合并选项,我猜是mercurial自己处理合并?所以我没有看到存储库资源管理器中的分支?这是应该怎么做的?
最后一个问题,查看历史记录和查看更改日志选项之间的区别是什么以及它们对应的hg选项?:

更新:忘记提及我是这个项目中唯一孤独的开发者.= P
在Application_End()Global.aspx 期间,HttpContext.Current为null.我仍然希望能够访问缓存 - 它在内存中,所以想看看我是否可以以某种方式引用它来将位保存到磁盘.
问题 - 当HttpContext.Current为空时,有没有办法以某种方式在内存中引用缓存?
也许我可以创建一个全局静态变量来存储指向缓存的指针,我可以在HTTP请求上更新(伪:) "static <pointer X>" = HttpRequest.Current并通过Application_End()中的指针检索对缓存的引用?
当没有Http请求时,是否有更好的方法来访问内存中的Cache?
Singleton类和具有所有静态成员的类(即方法和属性)之间是否存在任何差异.
我找不到任何'所有静态成员类'不能实现与正确实现Singleton模式的类相同的功能的实例?
例如.java.lang.Runtime是一个合适的Singleton类,而java.lang.System有所有静态访问方法,只有一个私有构造函数来避免外部构造.有没有人知道为什么类这样Runtime的类被制作出来Singleton并且没有实现像java.lang.System.
仅仅因为它是一个更清洁的设计(即更真实地模仿一个对象)还是在这里有一些性能优势?
elisp是否具有获取网址和目的地的功能并从网上下载该网址?
我发现url-retrieve和url-retrieve-synchronously,但url-retrieve需要一个回调,并url-retrieve-synchronously把一切都变成一个缓冲区.还有什么更简单的吗?
c# ×4
asp.net ×2
java ×2
.net ×1
.net-4.0 ×1
asp.net-mvc ×1
c++ ×1
caching ×1
cobertura ×1
distributed ×1
elisp ×1
emacs ×1
emma ×1
global-asax ×1
httprequest ×1
inheritance ×1
jpa ×1
jpa-2.0 ×1
kiln ×1
lambda ×1
mercurial ×1
properties ×1
sbt ×1
scala ×1
singleton ×1
tortoisehg ×1
transactions ×1