gpt4 book ai didi

c# - 代码执行后调用构造函数库

转载 作者:IT王子 更新时间:2023-10-29 04:53:06 29 4
gpt4 key购买 nike

假设我们有 A 类和 B 类。B 类扩展了 A 类。(B 类:A 类)

现在假设每当我实例化 ClassB 时,我想运行一些随机代码,然后才调用“base”以到达 ClassA 构造函数。

喜欢:

class ClassA
{
public ClassA()
{
Console.WriteLine("Initialization");
}
}

class ClassB : ClassA
{
public ClassB() //: base()
{
// Using :base() as commented above, I would execute ClassA ctor before // Console.WriteLine as it is below this line...
Console.WriteLine("Before new");
//base() //Calls ClassA constructor using inheritance
//Run some more Codes here...
}
}

在我通常使用的编程语言中,我可以通过在 Console.WriteLine() 之后调用 super() 来做到这一点;但是我不能用 C# 来实现。是否有任何其他语法或其他方法可以做到这一点?

最佳答案

有一种使用实例变量初始值设定项的 hacky 方法:

using System;

class ClassA
{
public ClassA()
{
Console.WriteLine("Initialization");
}
}

class ClassB : ClassA
{
private readonly int ignoreMe = BeforeBaseConstructorCall();

public ClassB()
{
}

private static int BeforeBaseConstructorCall()
{
Console.WriteLine("Before new");
return 0; // We really don't care
}
}

class Test
{
static void Main()
{
new ClassB();
}
}

较少 的做法是重新考虑如何构建 ClassB 开始。不是让客户直接调用构造函数,而是提供一个静态方法供他们调用:

public static ClassB CreateInstance()
{
Console.WriteLine("Before initialization stuff");
return new ClassB();
}

关于c# - 代码执行后调用构造函数库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10763919/

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