是否可以建立一个抽象类来提供其余的实现
本文关键字:实现 抽象类 一个 建立 是否 | 更新日期: 2023-09-27 18:29:12
有了这样的类,我能把它安装到位吗?
abstract class Mammal {
public abstract void Foo();
}
我希望类似的东西应该起作用:
Mammal wolf = new Mammal() {
public void Foo() { Console.WriteLine("Wooo"); }
}
然而,compilier不允许这样做。
看起来您在寻找类似于Java中的匿名内部类的东西。C#中没有等价的。选项:
- 请改为创建嵌套类
- 创建一个为每个抽象方法使用委托的实现,然后使用匿名函数"内联"创建这些实现
- 如果类型仅由一个抽象方法组成,请考虑使用委托而不是要开始的抽象类
抽象类的定义本身就是一个无法实例化的类。此处:
在类声明中使用抽象修饰符来指示类仅作为其他类的基类。成员标记为抽象的或包含在抽象类中的由派生自抽象类的类实现。
话虽如此,它可以有一个构造函数。
您的代码没有多大意义在C#中不起作用。
不,你做不到。参见参考文献
但是你可以继承你自己的类:
public class ConcreetMammal : Mammal
{
public void Foo() {Console.WriteLine("Wooo");}
}
如果你想做到这一点,我认为最接近的方法是将Foo
设为Action
,并为Mammal
提供一个构造函数,为Foo
分配一个传入函数。
class Mammal {
public readonly Action Foo;
public Mammal(Action foo) { Foo = foo;}
}
...
...
var MyMammal = new Mammal(() => {Console.WriteLine("Wooo");});
实际上Skeet所说的可能是这样的(一如既往的伟大输入)。。。
class Test
{
public delegate void MyFooSig();
public MyFooSig Foo { get; set; }
}
class Test1
{
public Action Foo { get; set; }
public Func<string, int, Test> MyOtherFoo { get; set; }
}
class Program
{
static void Main(string[] args)
{
var test = new Test
{
Foo = () => Console.Write("I'm in Foo"),
};
test.Foo();
var test1 = new Test1
{
Foo = () => Console.WriteLine("Foo via Action delegates"),
MyOtherFoo = (s, i) => new Test
{
Foo = () => Console.WriteLine("here it's me again..."),
},
};
test1.Foo();
test1.MyOtherFoo("", 1).Foo();
}
}
但事情不一样
(注意,这不是继承,类不是抽象的,它更多的是对同一个的实例化)此外,还有动态对象-您可能想看看Mock for C#,了解一些想法