Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.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#_.net - Fatal编程技术网

C# 创建新对象时重写

C# 创建新对象时重写,c#,.net,C#,.net,我可以用C#做这样的事吗 如果是这样的话,你怎么做?不,这不是一个JavaScript。不能在运行时将方法附加到已定义的类型 您可以使用来实现C.中的类似功能。 但是,基本上,我建议避免这种情况。如果可能的话,最好修改架构,然后使用动态的东西。让我们继续受益于静态类型语言的优点。不,这不是JavaScript。不能在运行时将方法附加到已定义的类型 您可以使用来实现C.中的类似功能。 但是,基本上,我建议避免这种情况。如果可能的话,最好修改架构,然后使用动态的东西。让我们继续受益于静态类型语言的优

我可以用C#做这样的事吗


如果是这样的话,你怎么做?

不,这不是一个
JavaScript
。不能在运行时将方法附加到已定义的类型

您可以使用来实现
C.
中的类似功能。
但是,基本上,我建议避免这种情况。如果可能的话,最好修改架构,然后使用动态的东西。让我们继续受益于静态类型语言的优点。

不,这不是
JavaScript
。不能在运行时将方法附加到已定义的类型

您可以使用来实现
C.
中的类似功能。
但是,基本上,我建议避免这种情况。如果可能的话,最好修改架构,然后使用动态的东西。让我们继续受益于静态类型语言的优点。

为了重写一个方法,您需要从
计算器
继承,并重写继承类中的
ValueOfK
方法(前提是在
计算器
中声明为
virtual

在C#中没有其他机制可以重写方法


为了重写一个方法,您需要从
Calculator
继承,并重写继承类中的
ValueOfK
方法(前提是在
Calculator
中声明为
virtual

在C#中没有其他机制可以重写方法


您可以使用扩展方法(编辑:如果
计算器
未实现
ValueOfK()
)(更多信息:)

分机:

public static class MyExtension
{
    public static int ValueOfK(this Calculator calc)
    {
        return 1;
    }
}
编辑:

否则,正如前面提到的那样,您需要从
Calculator
继承并重写
ValueOfK
。如果方法是
非虚拟
静态
,则需要使用
新建
关键字:

public class Calculator
{
    protected int ValueOfK()
    {
        return 0;
    }
}

public class BetterCalculator : Calculator
{
    protected new int ValueOfK()
    {
        return 1;
    }
}

您可以使用扩展方法(编辑:如果
计算器
未实现
ValueOfK()
)(更多信息:)

分机:

public static class MyExtension
{
    public static int ValueOfK(this Calculator calc)
    {
        return 1;
    }
}
编辑:

否则,正如前面提到的那样,您需要从
Calculator
继承并重写
ValueOfK
。如果方法是
非虚拟
静态
,则需要使用
新建
关键字:

public class Calculator
{
    protected int ValueOfK()
    {
        return 0;
    }
}

public class BetterCalculator : Calculator
{
    protected new int ValueOfK()
    {
        return 1;
    }
}

那是不可能的。你想达到什么目标?你为什么要这样做?只是好奇:你为什么要这样做?正是你在问题中所写的-不。但如果你给出理由,可能会有解决办法。这是不可能的。你想达到什么目标?你为什么要这样做?只是好奇:你为什么要这样做?这正是你所写的问题-不。但如果你能给出理由,可能会有解决办法。公平地说,Java(比Javascript更接近C)也有这种能力,通过匿名内部类。@JonSkeet:我不懂Java,所以我对我熟悉的语言做了一个说明。公平地说,Java(比Javascript更接近C#)也有这种能力,通过匿名内部类。@JonSkeet:我不懂Java,所以我对我熟悉的语言做了一个说明。不幸的是,扩展方法不能覆盖实例方法。@GazTheDestroyer是的,我犯了一个错误。继承是唯一的解决方案。不幸的是,扩展方法不能重写实例方法。@GazTheDestroyer是的,我犯了一个错误。继承是唯一的解决方案。如果方法是非虚拟或静态的,则需要使用
new
关键字而不是
override
@Zen-这将是隐藏而不是继承。如果方法是非虚拟或静态的,则需要使用
new
关键字而不是
override
@Zen-这将是隐藏而不是继承遗产
public class Calculator
{
    protected int ValueOfK()
    {
        return 0;
    }
}

public class BetterCalculator : Calculator
{
    protected new int ValueOfK()
    {
        return 1;
    }
}