Tag: oop

全局静态类和方法都不好吗?

人们普遍认为,应该避免严重依赖全球性的东西。 不会使用静态类和方法是一回事吗?

如何使用XmlSerializer序列化内部类?

我正在建立一个与第三方接口的库。 通过XML和HTTPpost进行通信。 那很有效。 但是,无论代码使用哪个库都不需要知道内部类。 我使用此方法将内部对象序列化为XML: internal static string SerializeXML(Object obj) { XmlSerializer serializer = new XmlSerializer(obj.GetType(), “some.domain”); //settings XmlWriterSettings settings = new XmlWriterSettings(); settings.Indent = true; settings.OmitXmlDeclaration = true; using (StringWriter stream = new StringWriter()) { using (XmlWriter writer = XmlWriter.Create(stream, settings)) { serializer.Serialize(writer, obj); } return stream.ToString(); } } 但是,当我将类的访问修饰符更改为internal ,我在运行时得到一个exception: [System.InvalidOperationException] = {“MyNamespace.MyClass由于其保护级别而无法访问。只能处理公共类型。”} […]

使用Reflection从类创建DataTable?

我刚刚学习了generics,我想知道我是否可以用它来动态地从我的类中构建数据表。 或者我可能在这里忽略了这一点。 这是我的代码,我要做的是从我现有的类创建一个数据表并填充它。 但是我陷入了思考过程中。 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Reflection; using System.Data; namespace Generics { public class Dog { public string Breed { get; set; } public string Name { get; set; } public int legs { get; set; } public bool tail { get; set; } } class Program { […]

如何解决循环引用?

如何解决循环引用问题,例如A类将B类作为其属性之一,而B类将A类作为其属性之一? 如何为这些问题做建筑师? 如果你举一个NHibernate的例子,对象之间会有一个父子关系。 它如何处理这些父子场景?

有没有办法从派生类型到达另一个对象的`protected`成员?

class MyBase { protected object PropertyOfBase { get; set; } } class MyType : MyBase { void MyMethod(MyBase parameter) { // I am looking for: object p = parameter.PropertyOfBase; // error CS1540: Cannot access protected member ‘MyBase.PropertyOfBase’ via a qualifier of type ‘MyBase’; the qualifier must be of type ‘MyType’ (or derived from it) } […]

阻止访问私有成员变量? 强制使用公共财产?

我使用的是.NET 2.0,因此无法访问自动属性。 所以我必须采用以下方式编写私有变量和公共属性 private string m_hello = null; public string Hello { get{return m_hello;} set{m_hello = value;} } 对于上述私有/公共成员的包含类的方法,是否仍然限制对私有变量的访问? 我不喜欢我可以使用m_hello或Hello。 谢谢。

一个事务中的多个聚合/存储库

我有一个支付系统,如下所示。 付款可以通过多个礼券进行。 礼品券与购买一起发行。 客户可以使用此礼品券以备将来购买。 当通过礼品券进行付款时,GiftCoupon表中的UsedForPaymentID列需要使用该PaymentID(对于礼品券ID)进行更新。 GiftCouponID已在数据库中提供。 当客户生产礼品券时,其上印有GiftCouponID。 运营商需要将此CouponID输入系统以进行付款。 对于MakePayment()操作,它需要两个存储库。 礼品券库 付款存储库 码 //使用GiftCouponRepository检索相应的GiftCoupon对象。 这涉及为一个事务使用两个存储库。 这是一个好习惯吗? 如果没有,我们如何改变设计来克服这个问题呢? 参考 :在DDD中,Aggregate应代表事务边界。 需要涉及多个聚合的交易通常表明应该改进模型,或者应该审查交易要求,或者两者兼而有之。 CQRS对我的域名是否正确? C#代码 public RepositoryLayer.ILijosPaymentRepository repository { get; set; } public void MakePayment(int giftCouponID) { DBML_Project.Payment paymentEntity = new DBML_Project.Payment(); paymentEntity.PaymentID = 1; DBML_Project.GiftCoupon giftCouponObj; //Use GiftCouponRepository to retrieve the corresponding GiftCoupon object. paymentEntity.GiftCouponPayments = new System.Data.Linq.EntitySet(); […]

引用类型变量回收 – 如果在其中声明,则是在循环中的每个循环中创建的新引用变量?

如下: MyObject myVariable; for(int i = 0; i < objects.Length, i++){ myVariable = objects[i]; // do stuff… } 效率更高: for(int i = 0; i < objects.Length, i++){ MyObject myVariable = objects[i]; // do stuff… } 因为每次都不会创建一个用于保存引用的新变量? (或者是编译器足够智能只是为了使用相同的变量).. (如果创建了一个新变量,它是否在堆上进行了malloced?)

获取对象内的所有关联/复合对象(以抽象方式)

业务 : 我有一个支付系统,可以通过GiftCoupon,ClubMembershipCard等支付。一个支付本身可以有多个支付组件 分类 : 我有一个付款类。 它有支付组件,如GiftCouponPayment,ClubMembershipCardPayment,CashPayment等。 每种组件类型都满足通用接口IPaymentComponent。 我使用有关现有类型的知识实现了它。 问题 1)如何以抽象的方式实现这个function – 不知道存在哪些类型? 这意味着它需要适用于实现IPaymentComponent接口的所有类型。 2)如果无法在LINQ to SQL中实现它,是否可以在Entity Framework中实现? 3)当LINQ to SQL在Payment对象中生成GiftCouponPayment实体时,它是关联/聚合还是组合? 注意:我使用LINQ to SQL作为ORM。 GiftCouponPayment和Payment是自动生成的类,这些对象由ORM创建。 我通过使用部分类为这些类添加了更多function。 注意:在数据库中,每个PaymentComponent(例如GiftCouponPayment)都有自己的属性(例如CouponValue,CardValue等)。 因此,每层次表不会很好 。 我们需要单独的表格。 那条线路有解决方案吗? 注意:此付款之前,数据库中已存在GiftCouponPayment。 我们需要使用客户提供的GiftCouponPaymentID来识别GiftCouponPayment对象。 我们只需要更新此表中的PaymentID列。 泄漏抽象是指任何已实现的抽象,旨在减少(或隐藏)复杂性,其中底层细节未被完全隐藏 LINQ to SQL Diagram 参考 : entity framework4,inheritancevs扩展? 如何选择inheritance策略http://blogs.msdn.com/b/alexj/archive/2009/04/15/tip-12-choosing-an-inheritance-strategy.aspx 流畅的API示例 – http://blogs.msdn.com/b/adonet/archive/2010/12/14/ef-feature-ctp5-fluent-api-samples.aspx C#代码 public interface IPaymentComponent { int MyID { […]

有没有更好的方法在C#中创建深度和浅层克隆?

我一直在为项目创建对象,有些实例我必须为这些对象创建一个深层副本我已经想到了使用C#的内置函数,即MemberwiseClone()。 困扰我的问题是每当我创建一个新类时,我都必须编写一个类似下面的代码的函数来进行浅拷贝。有人请帮助我改进这部分并给我一个更好的浅拷贝比第二行代码。 谢谢 :) SHALLOW COPY: public static RoomType CreateTwin(RoomType roomType) { return (roomType.MemberwiseClone() as RoomType); } 深度复制: public static T CreateDeepClone(T source) { if (!typeof(T).IsSerializable) { throw new ArgumentException(“The type must be serializable.”, “source”); } if (Object.ReferenceEquals(source, null)) { return default(T); } IFormatter formatter = new BinaryFormatter(); Stream stream = new MemoryStream(); using (stream) […]