有没有人在Visual Studio中使用类设计器?
我已经下载了2005年的模型动力玩具,并且对我迄今为止看到的东西印象深刻.MSDN类设计器博客似乎暂时没有更新,但它看起来仍然非常有用.
类设计器是构建基本应用程序的快速方法吗?还是我应该在纸上进行编程然后开始编码?
谢谢
编程C++时,我们习惯于在需要时创建复制构造函数(或者我们被教导).几年前切换到Java时,我注意到现在正在使用Cloneable接口.C#遵循定义ICloneable接口的相同路由.在我看来,克隆是OOP定义的一部分.但我想知道,为什么创建这些接口,并且复制构造函数似乎已被删除?
当我想到它时,我开始认为如果需要复制一个类型未知的对象(如对基类型的引用),则复制构造函数将没有用处.这看似合乎逻辑.但我想知道是否还有其他原因我不知道,Cloneable接口是否比拷贝构造器更受青睐?
[编辑]
我的原始问题是"为什么要在静态和非静态之间做出决定?两者都是一样的......"
不幸的是,它被编辑成一个C#特定的问题,我真的想避免.
所以,让我做一些补充:
当我说接口时,我不是指C#-keyword接口,而是我理解的东西,比如C++接口:一组定义良好的函数来操作我的对象.当说削弱我的界面时,我的意思是我有不同的功能(静态/非静态)做同样的事情.当有不同的功能来做同样的事情时,我的界面不再明确定义.
所以,正如看门人Bob发布的那样,我可以实现一个Validate()函数
Document.Validate(myDocumentObject);
Run Code Online (Sandbox Code Playgroud)
但是也
myConcreteDocumentObject.Validate();
Run Code Online (Sandbox Code Playgroud)
要返回我的Copy() - 示例可以实现Copy()之类的
myConcreteDocument.Copy(toPath);
Run Code Online (Sandbox Code Playgroud)
但是也
Document.Copy(myConcreteDocumentObject, toPath)
Run Code Online (Sandbox Code Playgroud)
要么
Document.Copy(fromPath, toPath)
Run Code Online (Sandbox Code Playgroud)
当我想到一个文件夹,其中包含属于我的Document的所有文件(在这种情况下,我不依赖于具体的实例 - 但我依赖于其他东西:)).
一般来说,我说的是静态方法,而不是静态类(对不起,如果我忘了推荐).
但正如Anton Gogolev所说,我认为我的文档课不是一个很好的例子而且没有很好的设计,所以我想我必须看看单一责任原则.
我还可以实现某种与DocumentClass一起运行的ManagerClass:
例如:
myDocumentManagerObject.Copy(myConcreteDocumentObject, toPath);
Run Code Online (Sandbox Code Playgroud)
要么
myDocumentManagerObject.Copy(myConcreteDocumentObject, toPath);
Run Code Online (Sandbox Code Playgroud)
但是,如果我参考方法1)我倾向于创建自己执行任务的对象,而不是使用我的DocumentObject 执行某些操作的其他对象(DocumentManager).
(我希望这不会采取关于OOP的宗教讨论的方向;).)
[/编辑]
起初这似乎是一个非常基本的问题,比如"何时使用静态方法,何时不使用",但这是我偶尔遇到的问题(我很难描述真正的问题是什么;也许只是为了得到原因(不)使用1)或为什么(不)使用2)).
(虽然我使用的是C#-Syntax但这不是C#限制的问题)
在OOP中,有两种处理对象的方法(以及其他方法):
1)如果我想要我的对象做某事,我只是告诉他这样做:
myConcreteObject.DoSomething();
Run Code Online (Sandbox Code Playgroud)
这就像和一个对象交谈一样.
2)或者如果你是静态方法的粉丝:
ObjectClass.JustDoIt();
Run Code Online (Sandbox Code Playgroud)
在某种程度上,我认为静态函数只是"感觉"更好.所以我倾向于经常使用静态方法(独立于具体实例 - 独立性总是好事).
所以,在设计课程时,我经常要决定是采用方法1)还是方法2):
想象一下,你有一个"文档"类,它应该代表一个应该保存到数据库中的文档:
一个文件
现在我遇到了几种创建这个类的方法:
//----- 1) non static approach/talking to objects -----
Document newDocument = new Document();
// Copy document to x (another …Run Code Online (Sandbox Code Playgroud) 我希望您的指导如何从我的USE案例图中准确地创建类及其关系(泛化,关联,聚合和组合)(请参阅下文).
我正在尝试创建此类图,以便我可以使用它创建一个简单的在线PHP应用程序,允许用户注册帐户,登录和注销,以及存储,搜索和检索MySQL数据库中的数据.
我的课程是否正确?或者我应该创建更多的课程?如果是这样,缺少哪些课程?将register,login,logout,search_database和add_to_database连接到用户时,我应该使用什么关系?
我是设计模式和UML类图的新手,但根据我的理解,关联关系将一个对象与另一个对象相关联; 聚合关系是一种特殊的关联,它允许"一个部分"属于一个以上的"整体"(例如信用卡及其PIN - PIN类也可以用于借记卡类); 组合关系是一种特殊的聚合形式,它允许每个部分一次只属于一个整体.
我觉得我遗漏了一些课程或者某些东西,因为我似乎无法从我对关系的理解中找到关系.
任何帮助将非常感谢.提前致谢.
使用案例图
使用案例说明:
注册 任何用户都可以通过注册创建帐户.系统将验证用户名和密码,如果缺少用户名或密码,将拒绝用户名和密码.
登录 任何用户只有在已经注册的情况下才能登录.他们的用户名和密码将以与注册帐户时相同的方式进行验证.
搜索数据库 任何用户都可以输入数据类型字符串的搜索键,系统将打开数据库,搜索searchkey,并根据是否找到searchkey返回true或false,然后关闭数据库.
向数据库添加数据 所有用户都可以输入一些数据,系统将打开数据库,存储数据,根据数据是否存储返回true或false,并关闭数据库.
注销 用户将按下注销按钮,系统将注销用户
从数据库中删除 只有管理员才能从数据库中删除数据.
删除常规用户 只有管理员才能删除普通用户
类图
我试图理解Python(2.6)如何处理类,实例等,在某个时刻,我尝试了这段代码:
#/usr/bin/python2.6
class Base(object):
default = "default value in base"
def __init__(self):
super(Base, self).__init__()
@classmethod
def showDefaultValue(cls, defl = default):
print "defl == %s" % (defl)
class Descend(Base):
default = "default value in descend"
def __init__(self):
super(Descend, self).__init__()
if __name__ == "__main__":
Descend.showDefaultValue()
Run Code Online (Sandbox Code Playgroud)
输出为:"基数默认值"
我想知道为什么"默认"字段没有被Descend类覆盖......有没有办法覆盖它?为什么不被覆盖?
任何提示(或解释页面的链接将不胜感激).谢谢!
我一直试图找出在PHP中使用位掩码或位域的最佳方法,现在我的应用程序的不同区域用于不同的用户设置和权限.我到目前为止最远的是来自PHP中用于设置的Stack Overflow post Bitmask中的svens贡献的类?.我稍微对它进行了修改,将其更改为使用类常量而不是DEFINE,并确保get方法仅传递给int.我还有一些示例代码来测试下面的类的功能.
我正在寻找任何建议/代码来进一步改进这个类,以便它可以在我的应用程序中用于设置和某些情况下的用户权限.
mcrumley在下面的评论中回答
另外,我对我的常数的编号有疑问.在这种类型的其他类和代码示例中,它将以2的幂列出事物.但是,即使我对常数1,2,3,4,5,6进行编号,它似乎也能正常工作.而不是1,2,4,8,16等.所以有人也可以澄清我是否应该改变我的常数?
一些想法......我真的想找出一种方法来扩展这个类,以便它可以很容易地与其他类一起使用.假设我有User班级和Messages班级.无论是User和Messages类将扩展此类,并能够使用位掩码为他们设置/权限(与其他班级后沿).那么也许应该更改当前的类常量,以便可以传入它们或其他选项?我真的不想在站点/脚本的其他部分定义(define('PERM_READ',1);)并且希望保持它有点封装,但也是灵活的; 我对这些想法持开放态度.我希望这是坚如磐石和灵活的,就像我说要与其他多个类一起使用设置或权限.可能应该使用某种阵列?来自上一个问题链接的@Svens发表评论"实施一些自动化的getter/setter或者ArrayAccess以获得更多的优点. - svens"您对这样的事情有什么看法?
请尽可能包含示例源代码.
<?php
class BitField {
const PERM_READ = 0;
const PERM_WRITE = 1;
const PERM_ADMIN = 2;
const PERM_ADMIN2 = 3;
const PERM_ADMIN3 = 4;
private $value;
public function __construct($value=0) {
$this->value = $value;
}
public function getValue() {
return $this->value;
}
public function get($n) {
if (is_int($n)) {
return ($this->value & (1 << $n)) != 0; …Run Code Online (Sandbox Code Playgroud) 我有一个定义CallRate类型的类.我需要通过从文件中读取数据来添加创建我的类的多个实例的功能.
我在我的类CallRate中添加了一个静态方法,它返回一个List<CallRate>.通过调用自己的构造函数之一,类可以生成自己的新实例吗?它有效,我只是想知道这是否正确.
List<CallRates> cr = CallRates.ProcessCallsFile(file);
Run Code Online (Sandbox Code Playgroud) 我正在编写一个简单的角色扮演游戏(学习和娱乐),而我正试图想出一种让游戏对象互相交流的方法.我试图避免两件事.
因此,考虑到这些参数,我需要一个关于游戏对象相互执行操作的好方法的建议.
例如
我想出的是一种PerformAction可以将生物或物品作为参数的方法.像这样
PerformAction(Creature sourceC, Item sourceI, Creature targetC, Item targetI)
// this will usually end up with 2 null params since
// only 1 source and 1 target will be valid
Run Code Online (Sandbox Code Playgroud)
或者我应该这样做吗?
PerformAction(Object source, Object target)
// cast to correct types and continue
Run Code Online (Sandbox Code Playgroud)
或者是否有一种完全不同的方式我应该考虑这个?
我正在考虑两种不同的类设计来处理某些存储库是只读的而其他存储库是读写的情况.(我预见不需要只写存储库.)
类设计1 - 提供基类中的所有功能,然后在子类中公开显示适用的功能
public abstract class RepositoryBase
{
protected virtual void SelectBase() { // implementation... }
protected virtual void InsertBase() { // implementation... }
protected virtual void UpdateBase() { // implementation... }
protected virtual void DeleteBase() { // implementation... }
}
public class ReadOnlyRepository : RepositoryBase
{
public void Select() { SelectBase(); }
}
public class ReadWriteRepository : RepositoryBase
{
public void Select() { SelectBase(); }
public void Insert() { InsertBase(); }
public void Update() { UpdateBase(); }
public …Run Code Online (Sandbox Code Playgroud) 我刚刚开始使用.NET ORM,我还没有在Entity Framework和NHibernate之间做出决定.但在这两种情况下,我遇到了一个问题,因为他们似乎希望我以各种方式破坏我的域模型的完整性,特别是在C#对象设计的更精细点上.这是关于这个问题的几个问题之一.
有一个原因virtual不是C#中方法的默认值.我的域模型中的对象没有准备好对子类的行为做出承诺,除非在非常具体的情况下我将它们标记为这样.换句话说,对于我的域对象上的极少数方法,为未指定的新功能添加一个钩子是合适的.
然而NHibernate希望我做出一切virtual,Entity Framework希望我做出所有实体引用virtual.我意识到为什么他们需要它(创建代理对象),并且我意识到它实际上是继承的合法用法virtual- 它们实际上是为了添加新功能而挂钩我的属性.但它让我觉得我必须使用完全与持久性相关的东西来注释我的域模型类,并且完全没有表达它们与实现者和消费者的实际契约.
作为一个较小的问题,我意识到我可能无法做任何事情,通常是表达sealed 因为所有通常的原因来注释我的课程.然而,这有点不那么光滑,因为为了持久性而从我的域对象中省略注释似乎不如添加注释.
令人沮丧的是,经过几年阅读像Effective C#这样的书或像Eric Lippert那样的博客,它们提供了关于如何设计富有表现力和防弹的C#对象的建议,使用ORM的需要让我把大量的知识从窗口.我希望这里有人可以指出我错在哪里,要么掌握他们的能力,要么是我对域建模和ORM角色的思考.
class-design ×10
c# ×4
oop ×4
.net ×1
architecture ×1
bitmask ×1
inheritance ×1
nhibernate ×1
orm ×1
php ×1
python ×1
uml ×1