Tag: oop

是一个拳击转换界面?

我有一个IEntity接口 public interface IEntity{ bool Validate(); } 我有一个实现此接口的类Employee public class Employee : IEntity{ public bool Validate(){ return true; } } 现在,如果我有以下代码 Employee emp1 = new Employee(); IEntity ent1 = (IEntity)emp1; // Is this a boxing conversion? 如果它不是拳击转换那么演员是如何工作的?

如何获得ProblemBase 的列表?

可能重复: 如何创建从具有不同类型的相同generics类inheritance的对象列表? 我正在使用几个从抽象类inheritance的对象。 但是要使用抽象类必须声明一个通用数据类型。 我遇到了问题,因为我需要一个包含ProblemBase列表的列表,尽管每个列表包含不同的TResult数据类型。 public abstract class ProblemBase { TResult[] Array; } 我想获得Array属性。 那就是问题所在。

.NET中的错误通信和恢复方法

我试图在我的C#代码中进行错误通信和恢复,而不使用exception。 举个例子,假设有一个Func A,它可以被Func B或Func C或其他函数调用。 必须设计Func A以保持重用。 (此应用程序有一个不断发展的库,新function将在一段时间内不断添加) 如果Func A无法执行它应该执行的操作,则返回int,其中任何非零值表示失败。 我也想传达失败的原因。 调用者函数可以多种方式使用此信息: 它可以向用户显示错误消息, 它可能会显示与其上下文更相关的错误消息 它本身可能返回一个int值,表示无法进一步激活调用者函数。 它可能会尝试使用一些智能算法从错误中恢复。 假设其他函数所依赖的任何函数可能需要将多个事物传递给其调用函数以采取适当的操作,包括状态代码,错误消息和指示数据状态的其他变量。 将所有内容作为分隔字符串返回可能不允许调用者函数在不解析字符串的情况下检索信息(这将导致其自身的问题,并且不建议使用)。 唯一的另一种方法是返回包含所有必需信息的成员变量的对象。 这可能会导致太多“状态”对象,因为每个函数都需要具有其状态对象。 我想了解如何以最优雅的方式设计此要求。 请注意,在编码时,Func A可能不知道调用函数是否具有从错误中恢复的智能,因此我不想抛出exception。 此外,我想看看这样的设计是否可行(并且同时优雅)而不使用exception。 如果唯一的方法是使用每个函数的数据对象进行通信,那么它是专业库的编写方式。 可以有通用数据对象吗? 注意将来可能会添加新function,这些function可能具有不同的状态变量,或者支持有关其错误的信息。 还要注意,由于函数的返回值是一个“状态”对象,因此它应该返回的实际数据可能需要作为ref或out参数传递。 这有设计模式吗? 在发布此问题之前,我已阅读以下文章: http://blogs.msdn.com/b/ricom/archive/2003/12/19/44697.aspx 当没有抛出exception时,try / catch块是否会损害性能? error handling没有例外 我还阅读了许多其他文章,建议不要使用代码流控制的exception,以及可恢复的错误。 此外,抛出exception有其自身的成本。 此外,如果调用函数想要从每个被调用函数抛出的exception中恢复,它将必须用try catch块包围每个函数调用,因为通用try catch块将不允许从下一行“继续”错误行。 编辑: 一些具体问题:我需要编写一个同步2个不同数据库的应用程序:一个是专有数据库,另一个是SQL Server数据库。 我想在一个单独的层中封装可重用的函数。 function如下:专有应用程序可以有许多数据库。 需要将来自每个数据库的一些信息推送到单个公共SQL Server数据库。 只有当应用程序的GUI处于打开状态并且只能通过XML读取时,才能读取专有应用程序的数据库。 算法是这样的: 阅读Proprietory应用程序中的开放数据库列表 对于每个数据库,启动同步过程。 检查此数据库中当前登录的用户是否具有“同步权限”。 (注意:可以使用不同的用户ID打开每个数据库)。 从此数据库中读取数据。 […]

在程序启动时实例化一个随机类

我现在正忙着inheritance和其他一些概念。 我创建了一个控制台应用程序,其中包含以下类: Public abstract Organism Public abstract Animal : Organism Public Bird : Animal Public Mammal : Animal Public Reptile : Animal Public Fish : Animal Public Amphibian : Animal Public Human : Organism 当控制台应用程序启动时,我想从人类,鱼类,哺乳动物,爬行动物,鸟类或两栖动物类创建一个新对象。 要实例化这些类中的哪一个是随机选择的。 一旦随机选择了一个类,我就使用console.writeline来询问用户关键问题,以便为给定的对象属性赋值。 如何从这些类中的一个创建随机对象?

限制对特定对象的公共setter访问(C#)

我正在尝试创建一个类(在C#中)作为我的应用程序的环境。 我正在尝试使类动态化,并将其作为参数发送到我的应用程序中的实体。 问题是,我希望能够更改此环境类(公共setter)的属性,但同时我希望接收环境的类无法使用这些setter。 我似乎无法找到一个很好的方式来表达我的问题(我认为这是我在谷歌或msdn上找不到这样的原因的一部分),但是很快, 我想创建一个类, setter只对我的某些对象公开,而不是对所有对象都公开 。 我目前正在尝试以下想法:避免公共设置器一起使用,并使用事件注册公开私有字段。 该类将在新的第三个对象中注册事件(作为参数发送到构造函数)。 将由环境注册的方法不仅仅是setter,因此触发这些事件将“允许访问”私有字段。 我喜欢一些想法(因为我觉得我的想法并不是那么好),或者更好的是我可以利用的一些模式。 提前致谢

IEnumerable 如何在后台运行

我正在徘徊IEnumerable接口的更深入的function。 基本上,它作为执行中的中间步骤。 例如,如果你写: IEnumerable temp = new int[]{1,2,3}.Select(x => 2*x); 在使用temp进行某些操作(例如List list = temp.ToList() )之前,不会计算(枚举) Select函数的结果。 但是,令我困惑的是,因为IEnumerable是一个接口,所以根据定义它不能被实例化。 那么,实际项目(在示例2*x项目中)所在的集合是什么? 而且,如果我们要编写IEnumerable temp = Enumerable.Repeat(1, 10); ,什么是存储1s的底层集合(数组,列表,其他)? 我似乎无法找到关于此接口及其function的实际实现的详尽(更深入)解释(例如,如果存在底层集合, yield关键字如何工作)。 基本上,我要求的是对IEnumerable的function进行更详细的解释。

从基类创建派生类的实例

我有我的抽象基类A : public abstract class A : ICloneable { public int Min { get; protected set; } public int Max { get; protected set; } public A(int low, int high) { this.Min = low; this.Max = high; } //… public object Clone() { return new this(this.Min, this.Max); //<– ?? } } 我的B级扩展了哪个: public class B […]

从静态方法调用非静态方法c#

可能重复: 从静态方法c#调用非静态方法 我们可以从静态方法创建实例中调用非静态方法。 码: public class Foo { public void Data1() { } public static void Data2() { Foo foo = new Foo(); foo.Data1(); } } 但是,我听说可以在委托的帮助下从静态方法调用非静态方法。 这是真的吗? 如果是,那怎么样? 请指导我提供示例代码。 谢谢。

超类构造函数中的虚拟化

我认为根据OOP的设计,虚拟化在超类构造函数中不起作用。 例如,请考虑以下C#代码。 using System; namespace Problem { public class BaseClass { public BaseClass() { Console.WriteLine(“Hello, World!”); this.PrintRandom(); } public virtual void PrintRandom() { Console.WriteLine(“0”); } } public class Descendent : BaseClass { private Random randomValue; public Descendent() { Console.WriteLine(“Bonjour, Monde!”); randomValue = new Random(); } public override void PrintRandom() { Console.WriteLine(randomValue.NextDouble().ToString()); } public static void […]

构造函数链的目的是什么?

在阅读了这个构造函数链接问题后,我只是想知道为什么会有人进行构造函数链接? 有人可以对可能有用的情景类型有所了解。 这是一个很好的编程习惯吗?