我使用一个类来扩展行对象的功能,该类将一个行句柄作为其构造函数的输入参数.然后,该类创建一个WindowMouseMotion侦听器,以检测突出显示该行的鼠标悬停,并显示一个包含用于设置某些行/数据属性的控件的面板.这很好用.
我现在正试图让这个类检测并通过监听该行的ObjectBeingDestroyed事件来响应被删除的行.我的问题是,通过存储行的句柄将此类链接到行对象是最好的解决方案还是可以通过继承来扩展行类?我查看了MATLAB文档并在线搜索,但无法找到有关继承图形类的确切信息.
考虑这个C++代码:
#include <iostream>
using namespace std;
struct B {
virtual int f() { return 1; }
int g() { return 2; }
};
struct D1 : public B { // (*)
int g() { return 3; }
};
struct D2 : public B { // (*)
virtual int f() { return 4; }
};
struct M : public D1, public D2 {
int g() { return 5; }
};
int main() {
M m;
D1* d1 = &m;
cout << …Run Code Online (Sandbox Code Playgroud) 如何实现组合模式?我有一个Container具有属性对象的类Contained.我想通过简单地调用来重定向/允许访问所有Contained类的方法.我是否以正确的方式做正确的事情?Containermy_container.some_contained_method()
我使用类似的东西:
class Container:
def __init__(self):
self.contained = Contained()
def __getattr__(self, item):
if item in self.__dict__: # some overridden
return self.__dict__[item]
else:
return self.contained.__getattr__(item) # redirection
Run Code Online (Sandbox Code Playgroud)
背景:
我正在尝试构建一个类(Indicator),它增加了现有类(pandas.DataFrame)的功能.Indicator将拥有所有的方法DataFrame.我可以使用继承,但我遵循"赞成组合而不是继承 "的建议(参见例如:python:inheriting或composition中的答案).不继承的一个原因是因为基类不可序列化,我需要序列化.
我发现了这个,但我不确定它是否符合我的需要.
我正在阅读有关如何处理想要在.NET Framework库中扩展密封类的问题的地方.
这通常是一项常见且有用的任务,所以它让我思考,在这种情况下,有什么解决方案?我相信在我读过的文章中有一种"方法"可以扩展密封类,但我现在不记得了(它不是扩展方法).
还有其他方法吗?谢谢
我越来越
System.NotSupportedException:EntitySet"Entities.Message"中的所有对象必须具有唯一的主键.但是,类型为"Model.Message"的实例和类型为"Model.Comment"的实例都具有相同的主键值
但我不知道这意味着什么.
使用EF4,我有一堆Message类型的实体.其中一些消息实际上是一个子类型,注释,按类型继承.只是
DB.Message.First();
Run Code Online (Sandbox Code Playgroud)
会产生例外.我有其他的子类型实例,我没有遇到问题,但我看不出任何差异.但是,有时候,如果我重新启动开发服务器,问题就会消失,但并非总是如此.
编辑:我已经解决了(之前应该有)问题是存储过程获取我的消息的错误.当前设置的方式是获取与Message相关的所有字段,sproc会忽略Comment表.然后上下文继续进行捣乱,可能是通过再次提取那些也是评论的消息,如您所建议的那样.如何正确地做到这一点是当前的核心问题.我在http://social.msdn.microsoft.com/Forums/en-US/adodotnetentityframework/thread/bb0bb421-ba8e-4b35-b7a7-950901adb602找到了解决方案的一些迹象.
我目前正在做一些API设计工作,涉及将许多接口的规范作为抽象,稍后将由各种具体类实现.
碰巧,我正在使用Java,但我认为这个问题与任何支持类似界面概念的语言相关.
我注意到之间通常有一个选项:
每种方法的优缺点是什么?
我有一个类有一些相当大的方法.在它的基本和最常见的状态中,大多数功能都不是必需的,所以我想知道是否有一种延迟加载只是部分类的方法.该方法需要能够访问私有/受保护的成员,使这将是理想的,如果该方法是原产于类,但是在寻找其他的解决方案,我碰上了这其中讨论在回调中使用私有成员这将是一个可行的解决方案(我将使用包含调用回调和延迟加载类的函数的单独类.那是2009年,以及这个功能是否已经在PHP的更高版本中删除了我不知道,但它似乎不适用于5.3.5
有没有办法做到这一点,或者你对我应该看的其他模式有什么建议吗?
谢谢.
哇!感谢所有的答案.我认为你们中有很多人认为这是一个可能的过早优化,或者更糟糕的是,根本不是优化是非常有效的,我将进行分析以检查我所解决的任何解决方案实际上是否有助于不伤害....现在正确阅读和消化你的所有想法.再次感谢.
假设我们有两个类,A并且B.当使用组合来建模"has-a"或"is-implemented-in-terms-of"关系(例如B has-a A)时,缺点与继承之一是B不包含A它需要的公共功能.为了获得对A公共函数的访问,有必要提供转发函数(与继承相反,B继承所有A的公共函数).
为了给出一个更具体的例子,假设我们有一个Person它具有-A ContactInfo:
using namespace std;
class ContactInfo
{
public:
ContactInfo();
void updateAddress(string address);
void updatePhone(string phone);
void updateEmail(string email);
private:
string address;
string phone;
string email;
};
class Person
{
public:
Person();
// Forwarding functions:
void updateAddress(string address){contactInfo.updateAddress(address)};
void updatePhone(string phone){contactInfo.updatePhone(phone)};
void updateEmail(string email){contactInfo.updateEmail(email)};
private:
ContactInfo contactInfo;
};
Run Code Online (Sandbox Code Playgroud)
在设计中忽略任何不足之处(这只是一个人为的例子来证明我下面的问题),我不得不不厌其烦地从复制确切函数签名ContactInfo中Person.在一个更复杂的例子中,可能有许多这样的函数,以及许多组合类的层,导致许多代码重复,具有所有常见的维护和容易出错的问题等. …
我正在使用Spring 3.1.1.RELEASE和Hibernate 4.1.0.Final.我得到了"无法初始化代理 - 无会话"异常,尽管事实上我正在将相关方法调用包装在@Transactional注释中.这是我的方法......
@Service("teacherImportService")
public class TeacherImportServiceImpl extends AbstractmyprojectService
{
…
@Transactional
@Override
public void saveUserObject(final JsonObject jsonData)
{
…
final myprojectOrganization myprojectOrg = myprojectOrgDao.findBymyprojectOrgId(myprojectSchoolId);
final Organization school = myprojectOrg != null ? myprojectOrg.getOrg() : null;
…
final Address address = new Address();
address.setState(school.getState()); // error occurs here
Run Code Online (Sandbox Code Playgroud)
我还需要做些什么来保证交易发生?我在我的应用程序上下文中包含了"<tx:annotation-driven />",我在下面包含了它
<context:component-scan base-package="org.mainco.subco" />
...
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${test.mysql.dataSource.driverClassName}" />
<property name="url" value="${test.mysql.dataSource.url}" />
<property name="username" value="${test.mysql.db.user}" />
<property name="password" value="${test.mysql.db.password}" />
</bean>
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property …Run Code Online (Sandbox Code Playgroud) 我有这样的类层次结构Beverage -> Coffee-> Latte.哪里Beverage是abstract超被延长Coffee.Coffee然后类增加了一些行为,但也是abstract.Latte扩展Coffee类,是一个具体的类.我已经使用继承来添加行为.并且继承确实有缺点,如超类方法的可见性,使代码易碎,代码紧密耦合.因此,编程原则Composition应该优先考虑Inheritance.但在这种情况下inheritance感觉如此自然Latte,Coffee并且Coffee是一种类型的Beverage使用composition添加行为感觉错误,尽管它的好处.所以这里的问题是
应该直觉覆盖设计原则吗?
饮料:
public abstract class Beverage {
private final String name;
private final double price;
Beverage(String name, double price){
this.name = name;
this.price = price;
}
public String getName() {
return name;
}
public double getPrice() {
return price;
}
public abstract void …Run Code Online (Sandbox Code Playgroud) composition ×3
inheritance ×3
c++ ×2
java ×2
.net ×1
aggregation ×1
api-design ×1
architecture ×1
c# ×1
graphics ×1
hibernate ×1
interface ×1
lazy-loading ×1
matlab ×1
methods ×1
oop ×1
pandas ×1
php ×1
python ×1
spring ×1
traits ×1
transactions ×1