gpt4 book ai didi

c# - 什么是基类构造函数以及为什么要使用它? (附示例)

转载 作者:行者123 更新时间:2023-11-30 20:34:38 25 4
gpt4 key购买 nike

我目前正在开发 ASP.NET Core MVC 应用程序(我正在将项目从 .NET 迁移到 .NET Core),我想知道基本构造函数。

具体来说,代码如下:

public partial class CompanyFormsContext : DbContext
{
public CompanyFormsContext()
: base("name=CompanyFormsContext")
{
}

public CompanyFormsContext(string connName)
: base("name=" + connName)
{
}
...
}

这是 ASP.NET 语法,现在 DbContext 不接受字符串作为参数,而是接受 DbContextOptionsBuilder。

我的问题是:基类构造函数如何以及何时有用?这里我可以有一个 CompanyFormsContext 的空构造函数,但我仍然可以为基类构造函数传递一个参数?

我猜测基本构造函数与 DbContext 相关,因为 CompanyFormsContext 是一个子类。但是,我很困惑为什么我可能想在这里使用基类。

以下是我们在项目中调用这些方法的两种方式:

        //First
var db = new CompanyFormsContext(siteUrl.StartsWith("http://www.") ? "CompanyFormsContext" : "CompanyFormsContextQA");
//Second
var env = Request.Headers["environment"].First();
var db = new CompanyFormsContext(env);

我可能必须修改它们,使其能够与新的 .NET Core 语法一起使用。将为每个实例调用哪个构造函数?

简而言之,我想了解在这种情况下如何使用基类以及它们的一般用途是什么。谢谢

最佳答案

如果在许多不同的场景中使用某种初始化,则使用基类构造函数。例如,如果您有类似的内容

public bool Abc { get; set; }

private readonly string x;

private readonly string newName;

public Test(string x, string newName)
{
Abc = true;
thix.x = x;
this.newName = newName;
}

(是的,相当愚蠢的例子,但无论如何)并且您总是希望进行初始化,您可能不希望每次有新的派生类时都必须一遍又一遍地键入该初始化。这不仅会很烦人,而且从维护的角度来看也是很糟糕的;如果您由于某种原因必须更改逻辑,则必须转到您输入的每一个位置并进行更改,如果您不小心错过了一个位置,则会在系统中引入错误。

请注意,父类型和派生类型都可能有多个构造函数。例如:

public abstract class SomeClass
{
public SomeClass(string a, string b)
{
// ...
}

public SomeClass()
{
//...
}
}

public SomeDerivedType : SomeClass
{
public SomeDerivedType(string a, string b) : base(a, b)
{
// ...
}

public SomeDerivedType() : base("test", "string")
{
// ..
}
}

基类构造函数和派生类型构造函数具有不同的参数是完全有效的。如果你仔细想想,这是有道理的;你正在调用一个完全不同的构造函数。例如,执行以下操作是完全有效的:

public SomeDerivedType()...
{
// The CollectionType constructor has a different number of parameters than SomeDerivedType does
abc = new CollectionType<int>(1, 2, 3, 4, 5);
}

关于c# - 什么是基类构造函数以及为什么要使用它? (附示例),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38903668/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com