使C#不实例化一个类,除非继承的最简单方法是什么?

11

如何让C#仅在继承类时实例化,这是最简单的方法?

听起来很奇怪,但我不想解释原因。我有一个基类和两个继承它的类。我只想使用派生类而不是基类。派生类没有任何额外的函数。什么是最简单的方式,以便我不能编写new BaseClass(); 以免我意外使用它? 我确实有一些操作基类而不是派生类的函数。


7
我喜欢那些人用准确的描述来阐述已有特性的问题(在这个例子中是抽象类)。这些问题非常整洁和简明,答案也很清晰明了,让我感到非常满足。 - KingNestor
1
结果发现也有人给我踩了。很奇怪。 - user34537
1
@acidzombie24,我猜你之所以接受了一个不受欢迎的答案,可能是因为你忽略了那些有超过20个赞的答案。 - KingNestor
1
有什么大不了的?我给这20个投票都+1,两个答案都一样。使用抽象关键字。 - user34537
8个回答

47

将该类作为抽象基类。

abstract class Person { }

class Programmer : Person { }

var person = new Person();          // compile time error
var programmer = new Programmer();  // ok

4
当您尝试实例化类时,即使在智能感知列表中也无法看到类名,这对于提高意识非常好 :) - Tarik

7

5
public abstract class BaseClass {
...
}

5

不要使用常规的:

"public Class MyClass"

而是改为:

"public abstract Class MyClass"

5

基类可以是抽象的吗?那就可以实现这个功能。


1
BaseClass的构造函数设为protected:
public class BaseClass {

   protected BaseClass()
   {
      // DO SOMETHING
   }

}


public class Derived : BaseClass {

   public Derived() {}
}

1
只有在某种奇怪的情况下,他无法将基类设为抽象类。 - Tad Donaghe
上面有更好的解决方案。 - David

1

根据您的需求描述,将您的类设为抽象是正确的方法。这将阻止您实例化基类,并允许您调用其函数。这还允许您将函数和属性标记为抽象,并强制继承类对它们进行实现。

如果您没有共享代码的需要,接口是一个不错的选择。它允许您以非常类似于抽象类的方式实现它,并将您的实现转换为它。

希望这能为您增加一些价值。


0

为基类使用受保护的构造函数


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接