更改默认基类而不是"对象"

meg*_*sta 0 c# compiler-construction visual-studio

不确定它是否合乎逻辑但想要学习.如果我们在创建新类时没有声明我们的基类,则visual studio和编译器都知道它继承了"object".有没有办法告诉编译器和visual studio(对于intellisense)我的基类不是"对象",例如它是"myobject"?也许是visual studio上的任何配置?

你可以说"从'myobject'继承你所有的课程",我知道但只是想知道它是否有可能.

Jon*_*eet 9

不,绝对不是.这是C#规范的一部分,绝不是可选的.从10.1.4.1节:

如果类声明没有类库,或者类库仅列出接口类型,则假定直接基类为object.

没有特定于实现的摆动室 - 这就是它的方式.就个人而言,我很高兴 - 我希望能够通过查看源代码来告诉直接基类,而无需了解任何项目配置.

编辑:为了清楚起见,C#可以设计为可以指定不同的类型作为基本类型.例如,我可以想象(但不喜欢)一种语言:

class Foo
{
}
Run Code Online (Sandbox Code Playgroud)

编译:

csc /evil:DefaultBaseClass=System.IO.Stream Foo.cs
Run Code Online (Sandbox Code Playgroud)

相当于:

class Foo : Stream
{
}
Run Code Online (Sandbox Code Playgroud)

这根本不会破坏.NET - 这是一个纯粹的语言决定.什么由.NET执行是大多数类型结束了至少间接基类System.Object.我不认为某种语言可以设计为允许您设置"并行"类型层次结构.


Geo*_*ett 8

这是不可能的,C#的设计方式,(几乎)所有东西都来源于Object.如果不是这种情况,你就不能依赖Object那里提供的方法,这些方法非常基础/有用.

请注意,.Net需要Object(直接或间接)派生所有对象.C#指定声明没有基类的对象继承自Object,其他语言可以自由指定另一种类型,但是该类型必须(Object根据.net要求)直接或间接地继承.

显然,您可以自由地为您创建的所有类型创建自己的基类,但是该基类必须从对象(直接或间接)继承.

是否要为所有/现有类型添加方法?在这种情况下使用扩展方法.