Tag: inheritance

填充基类和子类?

我需要在现有类中添加一些新字段及其所有现有字段/属性。 因此,每当我的派生类被DAL填充时,我也将填充基类的所有字段。 目前,我这样做但不确定这是正确的方法吗? 请举个例子。 另外,我不确定每次初始化派生类时基类对象是否都是新对象? public class Employee { private int _id; private int _name; public int ID { set { _id=value;} get { return _id;} } public int Name { set { _name=value;} get { return _name;} } protected void SetName () { _name=value; } protected void SetID() { _id=value; } } public class […]

防止暴露基类(抽象类)

所以我查看了许多相关的问题,但似乎没有一个问题适合。 至少不是我目前的理解。 由于这是一个简单的问题,我将简要介绍我的问题和代码。 我有五个class: internal class A internal abstract class B : A internal abstract class C : B public class D : C public class E { public void X(C c) { } } 这里有一个明显的可访问性问题,参数C在public方法中使用。 我需要在不暴露C类的情况下访问D类。 我相信这可能是由于abstract关键字的性质以及我使用它的最小经验。 到目前为止,我从未有过创建abstract类的必要性,这是我第一次在这个级别上处理它。 根据我的理解,在这种情况下,只要我记得正确地实现所有内容,就不必使用abstract类。 我的问题 我应该创建一个具有D私有实例的类F作为一种包装来防止暴露吗? 使用abstract的可靠理由是什么,因为我不相信这段代码是一个很好的例子。 我可以在不暴露A , B或C情况下暴露D其他方法是什么? 笔记 我正试图通过我目前的变化进行外科手术。 最初所有的课程都是私人的。 我看了很多相关的post(这里有几个): 与抽象类不可访问的可访问性 可访问性不一致 可访问性不一致 可访问性问题不一致[重复] 可访问性不一致,属性类型

为什么不能在C#中使用重写方法? (不是关键字)

public abstract class A { public void CallMe() { Console.WriteLine(“I am A.”); } } public class B : A { new public void CallMe() { Console.WriteLine(“I am B.”); } } class Program { static void Main(string[] args) { A a = new B(); a.CallMe(); } } 输出是“我是A.” 为什么会这样? 这合理吗? 由Visual Studio 2012编译。

为什么’Func ‘编译’Func ,其中TGeneric:IBase’没有?

为什么下面的集团错了? public interface IBase { } public class ClassX : IBase { } public class ClassY { public static ClassX FunctionReturnX() { return new ClassX(); } } public class ClassZ where TGeneric : IBase { Func funcInterface = ClassY.FunctionReturnX; //Right Func funcGeneric = ClassY.FunctionReturnX; //Wrong }

多重inheritance(可能是抽象类?)C#entity framework

最近几周,我一直致力于使用Visual Studio 2015在c#上基于Entity Framework 6(Code-First)开发数据库。 我目前正在研究inheritance提供的所有选项。 此时并遵循数据库的标准,我应该使用主键实现多重inheritance。 这意味着什么? 这意味着我应该实现一个inheritance自另一个类的类,并拥有自己的PK来识别他与父类不同的类。 此时我可以用TPC实现它,使父类抽象而不是在父类上定义任何PK。 这是此时代码的示例(这有效,我已对其进行了测试) public abstract class Person { public string Name { get; set; } public string LastName { get; set; } } [Table(“Students”)] public class Student : Person { [Key]public int Id_student { get; set; } public string code_s { get; set; } public virtual ICollection […]

序列化中基类字段的自定义XML元素名称

如何在进行序列化时更改从基类inheritance的字段的XML元素名称? 例如,我有下一个基类: public class One { public int OneField; } 序列化代码: static void Main() { One test = new One { OneField = 1 }; var serializer = new XmlSerializer(typeof (One)); TextWriter writer = new StreamWriter(“Output.xml”); serializer.Serialize(writer, test); writer.Close(); } 我得到了我需要的东西: 1 现在我创建了Ainheritance自A新类,并为其添加了字段和自定义XML元素名称: public class Two : One { [XmlElement(“SecondField”)] public int TwoField; } 序列化代码: […]

C# – 从派生的方法中隐藏UserControl类的所有方法

我有一个自定义用户控件。 通常它inheritanceUserControl类。 但通过这种方式,它inheritance了UserControl所有公共方法和属性。 但我想隐藏所有这些并实现我自己的一些方法和属性。 假设我有一个名为CustomControl的自定义控件。 public class CustomControl : UserControl 当我创建CustomControl的实例时: CustomControl cControl = new CustomControl(); 当我输入cControl. intellisense为我提供了从UserControl派生的所有方法和属性。 但我想只列出我在CustomControl类中实现的。 谢谢

如何在基类中创建对象的克隆?

我需要一个方法,在基类中创建一个对象的空克隆? 例如: public class ChildClass : ParentClass { public ChildClass() { } } public class ParentClass { public SomeMethod() { // I want to create an instance of the ChildClass here } } 到目前为止,我们在父类中定义了一个抽象方法。 并且,所有子类都实现它们。 但是,实现对所有人来说都是一样的,只是一种不同的类型。 public class ChildClass : ParentClass { public ChildClass() { } public ParentClass CreateEmpty() { return new ChildClass(); } } […]

为什么我不能同时覆盖和新建一个Property(C#)?

根据这个问题,你似乎可以为方法做到这一点。 我想知道的是当我尝试使用属性时它不起作用的原因。 public class Foo { public virtual object Value { get; set; } } public class Foo : Foo { public override object Value { get { return base.Value; } set { base.Value = (T)value; //inject type-checking on sets } } public new T Value { get { return (T)base.Value; } set { base.Value […]

服务 – 客户端界面,架构建议

我有一个Windows WCF服务和Web客户端。 我的服务有一种方法 [OperationContract] SubmitOrder(OrderInfo info)…. // class used to pass all relevant data [DataContract] class OrderInfo { [DataMember] OrderType Type; // general order data } 在我引入新的订单类型(由OrderInfo.Type属性控制)之前,这很棒。 您可以将新订单类型视为从一般订单(行为方面)派生而来。 每个新订单都有一些额外的属性。 实现Order的这种多态行为的最佳方法是什么? 目前,我只是在添加新订单时向OrderInfo类添加新属性。 [DataContract] class OrderInfo { [DataMember] OrderType Type; // general order data // First custom order data // Second custom order data // TODO – […]