Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在构造函数中包含基类的参数时,是否有方法利用继承?_C#_Asp.net_Inheritance - Fatal编程技术网

C# 在构造函数中包含基类的参数时,是否有方法利用继承?

C# 在构造函数中包含基类的参数时,是否有方法利用继承?,c#,asp.net,inheritance,C#,Asp.net,Inheritance,从我所读到的内容来看,似乎没有一种很好的方法可以将基类转换为继承类 根据问题的答案,我已经开始创建一个构造函数,它将基类的一个实例作为参数 构造函数如下所示: public DerivedClass(BaseClass base) { this.Id = base.Id; this.Foo = base.Foo; // .. this.NewProperty = SomeNewValue; } 这也意味着,如果基类获得一个新属性,则派生类中的构造函数也需要修改,

从我所读到的内容来看,似乎没有一种很好的方法可以将基类转换为继承类

根据问题的答案,我已经开始创建一个构造函数,它将基类的一个实例作为参数

构造函数如下所示:

public DerivedClass(BaseClass base) {
    this.Id = base.Id;
    this.Foo = base.Foo;
    // ..
    this.NewProperty = SomeNewValue;
}
这也意味着,如果基类获得一个新属性,则派生类中的构造函数也需要修改,以便复制该属性


有没有一种方法可以利用派生类从基类继承这一事实来降低此构造函数的脆弱性?

您似乎还没有完全掌握继承,并且已经过多地考虑了需要做什么

我已经开始了,刚刚创建了一个构造函数,它将基类的一个实例作为参数

在扩展从基类继承时不需要这样做,只在包装类时才需要这样做

有没有一种方法可以利用派生类从基类继承这一事实来降低构造函数的脆弱性

是:使用构造函数重载。考虑到这个基类:

public class MyBase
{
    public virtual string Name { get; set;}
}
您可以这样做:

但更好的方法是像这样利用构造函数重载,其中构造函数参数传递给基类构造函数:

public class MyBase
{

    public MyBase(string name)
    {
        Name = name;
    }

    public virtual string Name { get; set;}
}

public class MyExtendedClass : MyBase 
{
    public MyExtendedClass(string name) : base (name) {   }
}
对于希望不可变的属性,您倾向于在构造函数上传递值。对于其他系统,您可以利用内联初始化:

var myNewClass = new MyExtendedClass() { Name = "blah" };

似乎你还没有完全掌握继承权,你已经过多地考虑了你需要做什么

我已经开始了,刚刚创建了一个构造函数,它将基类的一个实例作为参数

在扩展从基类继承时不需要这样做,只在包装类时才需要这样做

有没有一种方法可以利用派生类从基类继承这一事实来降低构造函数的脆弱性

是:使用构造函数重载。考虑到这个基类:

public class MyBase
{
    public virtual string Name { get; set;}
}
您可以这样做:

但更好的方法是像这样利用构造函数重载,其中构造函数参数传递给基类构造函数:

public class MyBase
{

    public MyBase(string name)
    {
        Name = name;
    }

    public virtual string Name { get; set;}
}

public class MyExtendedClass : MyBase 
{
    public MyExtendedClass(string name) : base (name) {   }
}
对于希望不可变的属性,您倾向于在构造函数上传递值。对于其他系统,您可以利用内联初始化:

var myNewClass = new MyExtendedClass() { Name = "blah" };

您能否向执行赋值的基类添加受保护的构造函数,然后将基类作为参数传递给它:

protected BaseClass(BaseClass source)
{
    this.Id = source.Id;
    this.Foo = source.Foo;
    ...
}

从而使代码在基类本身中复制基类?

您是否可以向执行赋值的基类添加受保护的构造函数,然后将基类作为参数传递给它:

protected BaseClass(BaseClass source)
{
    this.Id = source.Id;
    this.Foo = source.Foo;
    ...
}

从而使代码在基类本身中复制基类?

您可以将代码与其余部分一起发布,而不是发布链接。。这样人们就不必往后跳,你能举个更具体的例子吗?在什么情况下,你手头有一只动物,需要构建一只老虎?在我有一堆动物的情况下,我筛选出我想要制作老虎的动物,现在我想要一堆老虎。你可以将你的代码与其他动物一起发布,而不是发布链接。。这样人们就不必往后跳,你能举个更具体的例子吗?在什么情况下,你手里有一只动物,需要造一只老虎?在我有一堆动物的情况下,我筛选出我想要造老虎的动物,现在我想要一堆老虎。