Tag: oop

正确的模式设计父子类

如何设计Parent-Child类。 注意:这里Parent不是基类,而是显示一对多关系。 方法“A” public class Company { public int CompanyID; … public IList Branches; } public class Branch { } Appraoch“B” public class Company { public int CompanyID; … } public class Branch { public int CompanyID; //which represents company object } 分支屏幕的最终UI设计:= 在树视图中显示以查看屏幕: – Company A Branch 1 Branch 2 Company B Branch 3 […]

如何从类外部更改公共变量的属性

抱歉标题,我认为我无法解释它: 这是一个简化的示例类,这个工作正常。 (我也有一个Save()方法) public class busItem { public Item vItem; public busItem(int pItem_Id) { DBDataContext db = new DBDataContext(); Item vItemQuery = (from i in db.Items where i.Id == pItem_Id select i).FirstOrDefault(); vItem = new Item(); vItem.Id = vItemQuery.Id; vItem.Desc = vItemQuery.Desc; } } 这是我的代码隐藏调用: busItem item = new busItem(1); item.vItem.Desc = “new description”; 问题是,当我尝试传递“新描述”时,我得到一个“空引用”exception。 […]

C#:在GET / SET属性上为类创建事件

我希望每次我的class级中的一个房产都被设置时发射一个事件。 我希望能够在设置我的某个属性时触发同一事件。 我有(大约12个) 即 public class MyClass { private int _myHeight; private int _myWidth; public int myHeight { get { return myHeight; } set { myHeight = value; //This fires event! } } public int myWidth { get { return myWidth; } set { myWidth = value; //This will fire the same event! } 我不是新事物本身,而是创造事件的新手。 […]

传递接口而不是对象实例

以SqlBulkCopy.WriteToServer()方法为例。 其中一个重载采用IDataReader作为参数。 我的问题是,将接口传递给方法而不是对象实例本身有什么好处/好处? http://msdn.microsoft.com/en-us/library/434atets.aspx

是否可以覆盖dll文件中的类中的方法?

我在我的Windows窗体项目中包含了一个dll文件。 1.是否可以完全覆盖特定的类? 2.是否可以在dll文件中为特定类添加新方法? 3.是否可以覆盖dll中类中的方法? 我宁愿避免的替代方案:我知道我可以使用扩展方法来创建静态新方法。 我还可以从特定类inheritance,然后向派生类添加新方法。 我想要实现的目标:我现在必须创建一个项目并将其作为dll文件添加到更大的项目中。 但是我们被告知我们下个月需要为原始项目添加更多function。 我正试图找出解决这个问题的最佳方法。 较小的项目基于mvc设计。

你能删除一个装饰者吗?

是否可以从对象中删除装饰器? 说我有以下代码: abstract class Item { decimal cost(); } class Coffee : Item { decimal cost() { // some stuff } } abstract class CoffeeDecorator : Item { Item decoratedItem; } class Mocha : CoffeeDecorator { Item decoratedItem; public Mocha(Coffee coffee) { decoratedItem = coffee; } } public void Main(string[] args) { Item coffeeDrink = […]

用户单击treeview节点时tabcontrol更改

以下是我的应用程序概述: 它基本上是一本烹饪书。 用户可以创建食谱,然后在该食谱中创建食谱。 我有一堂课CookBook和一堂课。 CookBook记录了与烹饪书相关的食谱,食谱跟踪食谱的内容。 对于UI,我有一个树视图,它将显示CookBook中的食谱。 我有一个TabControl,它将显示与每个配方相关的选项卡。 选项卡在运行时由用户动态创建。 当用户点击其中一个食谱时,我希望TabControl显示与该特定食谱相关的选项卡。 当用户点击不同的配方时,我希望上一个选择的选项卡消失,并显示当前选择的选项卡。 (旁注:为了节省目的,我将稍后将选项卡的内容和内容保存到文件中) 我希望Recipe类包含有关TabControl的详细信息(配方有多少个选项卡,每个选项卡的标题,选项卡的内容)。 但我不希望Recipe负责创建Tabs或TabControl。 我的问题是,我如何完成上面的粗体部分? 人们对这类问题的看法和经验是什么? 这类问题的最佳做法是什么? 谢谢!

烦人的SQLexception,可能是由于某些代码做错了

我开始研究这个“已经开始”的项目,在尝试执行与SQL Server 2008的一些交互时,我遇到了一个非常烦人的错误: 服务器无法恢复事务。 说明: 我在这个特定方法调用中遇到的其中一个错误: aspx.cs调用: busProcesso openProcess = new busProcesso(pProcessoId); try { if (openProcess.GetDocument() == null) { //Irrelevant code. } } catch{ //… } 商务舱(相关部分): public class busProcesso : IbusProcesso { public Processo vProcesso { get; set; } RENDBDataContext db; public busProcesso() { vProcesso = new Processo(); } public busProcesso(decimal pProcessoId) { db […]

为新行为扩展(而不是更改)搜索类?

我正在更改提供数据的API(这是我原始问题的更新)。 某些搜索需要有关作者的数据并采用IAuthor对象。 API有一个IAuthor接口和一个实现IAuthor具体类,叫做Author 。 当作者被标记为小说家时,我需要改变Search.GetBooksByAuthor方法的行为以给出不同的语义。 我听说过开放/封闭原则 ,似乎改变IAuthor和/或Author和/或Search类会违反这一点(尽管Book类肯定保持不变)。 怎么做这个简单的改变? 例如,我最初在想这样的事情,但我的想法可能很糟糕,因为它涉及更改Search类: //Before class Search { public Books[] GetBooks(IAuthor author){ // Call data access GetBooks… } } //After class Search { public Books[] GetBooks(IAuthor author){ // To maintain pre-existing behaviour // call data access GetBooks method with SQL param @AsNovelist = false… // (or don’t pass anything because […]

如果Items等效,则将项目从一个类映射到另一个类

假设我有一个看起来像这样的class : public class Person { public string Name {get; set;} public int Number {get; set;} } 而另一个看起来像这样: public class Dog { public string Name {get; set;} public int Number {get; set;} } 它们是两个不同的类,但它们碰巧具有完全相同的元素(一个名为Name的字符串和一个名为Number的int) 有没有一种简单的方法在C#中,比方说,如果我有一个Person实例,然后创建一个具有相同Name和Number的Dog实例? 例如,如果我有: Person person = new Person(); person.Name = “George”; person.Number = 1; 我知道我不能简单地去: Dog dog = person; 因为它们是两种不同的类型。 但是在C#中是否有办法检查“哦,如果它们具有相同的元素,则将Dog的相同元素设置为与Person 。但我觉得必须有一种比执行类似操作更简单的方法: […]