我目前正在阅读Code Complete,McConnell强烈建议将所有变量设为私有.Coincedentally我正好在一个我需要更改私有变量的项目上工作.
该类有一个私有变量(a String)告诉它从哪里加载图像以在系统chrome中使用.我需要更改此图像,我不知道其他语言,但就我所知,在Flex/AIR中,没有办法覆盖私有变量.
如果它已被声明为protected,我可以简单地扩展该类,并覆盖该变量.但由于它是私有的,我不得不从类中复制所有代码并创建一个重复的类,唯一的区别就是字符串.
我认为参数是使用私有,因为它使得超级和子类之间的松散耦合,但是我不得不完全违反DRY才能实现简单的字符串更改,这在我看来更糟糕.
这让我觉得受保护比私有更好.但是,我想以正确的最佳实践方式做事.因此,如果私有更好,我想了解原因.
如果普遍的共识是私人更好,有人能解释为什么吗?
我想通过蓝牙将iphone连接到打印机,但我在iPhone 3.0 SDK中找不到任何关于蓝牙的课程.我是否需要加入"Made for iPod并与iPhone许可计划合作"才能获得SDK?或者可以在不加入该计划的情况下完成此操作?
我是否必须关闭ISessionCastle ISessionManager为NHibernate 生成的?我该如何处理这些交易ISession呢?我对NHibernate还很陌生.
编辑:我想延迟加载,但我收到此消息:
正在初始化[未能懒惰地初始化角色集合:,没有关闭会话或会话"
这是我继承的通用存储库,用于实现特定的实例.
[Transactional]
public class Repository<TKey, TModel>
: IRepository<TKey, TModel>
where TKey : IComparable
where TModel : class
{
private readonly ISessionManager _sessionManager;
protected ISession Session { get { return _sessionManager.OpenSession(); } }
public Repository(ISessionManager sessionManager)
{
_sessionManager = sessionManager;
}
#region IRepository<TKey,TModel> Members
public virtual TModel Select(TKey key)
{
using (var session = _sessionManager.OpenSession())
{
return session.Get<TModel>(key);
}
}
public virtual IList<TModel> SelectWhere(Func<TModel, bool> query)
{
using (var session …Run Code Online (Sandbox Code Playgroud) nhibernate castle-windsor castle lazy-loading windsor-nhfacility
我知道序列化是什么,但对我来说,这是一个没有描述它意味着什么的术语.
为什么我们调用序列化序列化?将对象转换为原始数据(以及为此扩充/反序列化)有什么用于与"串行"一词相关的任何内容?谁创造了这个术语,为什么?
好吧,我之前没有用C#编程,但是我发现了这段代码,并想知道它是做什么的.现在,我现在只是搜索并找到第一次出现的"." 并用""替换它,但是""中到底是什么?这会删除句点还是有空格字符替换"."?我试图找出如何将此方法转换为Objective-C,但我需要知道句点是否被替换为没有字符或空格字符.
someString.Replace(".", "")
Run Code Online (Sandbox Code Playgroud) 有人可以解释一下设置ATG开发环境以便与JBoss AS一起使用所涉及的所有步骤.我的要求很简单,我需要开发和部署一个简单的J2EE应用程序,其中包含一些表单和后端逻辑,以保存表单中输入的数据.
我最近写了一个Vector 3类,并将我的normalize()函数提交给了朋友.他说它很好,但是我应该尽可能地乘以倒数,因为在CPU时间里"乘法比划分便宜".
我的问题很简单,那是为什么?
我在我的数据层(基于实体框架)中使用DbProviderFactories并使用SQLite作为我的数据库,但我没有App.Config来拥有以下代码:
<configuration>
<system.data>
<DbProviderFactories>
<remove invariant="System.Data.SQLite"/>
<add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".Net Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" />
</DbProviderFactories>
</system.data>
</configuration>
Run Code Online (Sandbox Code Playgroud)
相反,我想让我的数据层以编程方式放入.有人知道这样做的方法吗?
编辑:
这样做的原因是我使用IoC容器来选择数据层,而我的一些数据层不需要App.Config值,或者让它们与数据层紧密相连.
这里有一些代码概述了我一直在努力解决的问题.最后一个问题(就目前而言g ++而言)是:"执行Bar :: Bar(...)构造函数例程时,"错误:'Foo-T'未在此范围内声明".否则,我试图学习的问题是基于使用模板传递给派生类构造函数的参数设置基类成员类型.如果只是通过将参数传递给derived-class构造函数来设置基类成员类型(T Foo-T),我宁愿这样做.到目前为止,我看不到使用模板参数和匹配的派生类构造函数参数来完成此任务的方法.您能否在以下代码中发现任何可以更好地实现相同目标的代码?我对通用编码和模板很新.
#include <iostream>
typedef int a_arg_t;
typedef double b_arg_t;
typedef std::string foo_arg_t;
class TypeA {
public:
TypeA ();
TypeA (a_arg_t a) {
/* Do sosmething with the parameter passed in */
}
};
class TypeB {
public:
TypeB ();
TypeB (b_arg_t b) {
/* typeB's constructor - do something here */
}
};
// The base-class with a member-type to be determined by the template argument
template <class T>
class Foo {
public:
Foo (const foo_arg_t …Run Code Online (Sandbox Code Playgroud) ado.net ×1
android ×1
atg ×1
bluetooth ×1
c# ×1
c++ ×1
castle ×1
cpu-usage ×1
history ×1
inheritance ×1
iphone ×1
lazy-loading ×1
nhibernate ×1
objective-c ×1
oop ×1
performance ×1
sqlite ×1
string ×1
templates ×1
theory ×1