首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么以接口名为前缀的方法不能在C#中编译?

以接口名为前缀的方法不能在C#中编译,是因为C#编程语言规范中,接口方法的定义不能包含实现。接口是一种抽象类型,它定义了一个合约,规定了实现该接口的类或结构体必须实现哪些方法。接口方法的目的是为了提供一种标准化的方式,以便多个类或结构体可以遵循相同的规则和行为。

在C#中,接口方法的定义必须遵循以下规则:

  1. 接口方法不能包含实现。
  2. 接口方法不能声明为static或者是virtual。
  3. 接口方法不能声明为extern。
  4. 接口方法可以声明为public、private或者是protected。

因此,如果在C#中使用接口名作为方法前缀,则会导致编译错误,因为这违反了接口方法的定义规则。如果需要在实现类中实现接口方法,则应该使用实现类的名称作为方法前缀,并在方法前加上“override”关键字。

例如,假设有一个名为“IMyInterface”的接口,其中定义了一个名为“DoSomething”的方法。如果需要在一个名为“MyClass”的类中实现该接口,则应该按照以下方式进行定义:

代码语言:csharp
复制
public interface IMyInterface
{
    void DoSomething();
}

public class MyClass : IMyInterface
{
    public void DoSomething()
    {
        // 实现代码
    }
}

在这个例子中,“DoSomething”方法是在“MyClass”类中实现的,而不是在接口“IMyInterface”中实现的。因此,在实现类中,可以使用“override”关键字来指定该方法是接口方法的实现。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

苏州同程旅游学长给我全面的面试知识库

我们已经介绍了50多种基本知识,推进常见C#面试问题和答案 2、什么是C#C#是一种面向对象,类型安全托管语言,由.Net框架编译生成Microsoft中间语言。...编译器将方法地址存储为入口点,并使用此信息在创建任何对象之前开始执行。Void是类型修饰符,它声明方法或变量返回任何值。 6、什么是物体? ?...我们不能在静态方法中使用’This’,因为我们只能在静态方法中使用静态变量/方法。 13、常量和只读之间有什么区别? 常量变量在编译时声明和初始化。此后无法更改该值。...用户控件不能放置在工具箱并从中拖放。他们有自己设计和代码背后。用户控件文件扩展名为ascx。 17、 C#密封类是什么? 当我们想限制继承类时,我们创建密封类。...可以使用参数不同数据类型,参数不同顺序和参数数量来重载方法。 38、为什么不能为接口方法指定可访问性修饰符? 在接口中,我们有没有方法定义虚拟方法。所有方法都将在派生类中被覆盖。

3K20

开心档之​C# 基本语法​

C# 基本语法 C# 是一种面向对象编程语言。在面向对象程序设计方法,程序由各种相互交互对象组成。相同种类对象通常具有相同类型,或者说,是在相同 class 。...C# 注释 注释是用于解释代码。编译器会忽略注释条目。...在 C# ,类命名必须遵循如下基本规则: 标识符必须字母、下划线或 @ 开头,后面可以跟一系列字母、数字( 0 - 9 )、下划线( _ )、@。 标识符第一个字符不能是数字。...标识符必须包含任何嵌入空格或符号,比如 ? - +! # % ^ & * ( ) [ ] { } . ; : " ' / \。 标识符不能是 C# 关键字。除非它们有一个 @ 前缀。...C# 关键字 关键字是 C# 编译器预定义保留字。这些关键字不能用作标识符,但是,如果您想使用这些关键字作为标识符,可以在关键字前面加上 @ 字符作为前缀

30120

c#多态学习总结

在面向对象编程范式,多态性往往表现为"一个接口,多个功能"。 多态性可以是静态或动态。在静态多态性,函数响应是在编译时发生。在动态多态性,函数响应是在运行时发生。...多态就是同一个接口,使用不同实例而执行不同操作 1、静态多态性 在编译时,函数和对象连接机制被称为早期绑定,也被称为静态绑定。C#提供了两种技术来实现静态多态性。...c#,也有类似的特性,并且也更加多特性,有关抽象类一些规则: a、您不能创建一个抽象类实例。 b、您不能在一个抽象类外部声明一个抽象方法。...以下实例创建了 Shape 基类,并创建派生类 Circle、 Rectangle、Triangle, Shape 类提供一个名为 Draw 虚拟方法,在每个派生类重写该方法绘制该类指定形状。...3.抽象方法必须在派生类重写,这一点和接口类似,虚方法不需要再派生类重写。简单说,抽象方法是需要子类去实现。虚方法是已经实现了,可以被子类覆盖,也可以覆盖,取决于需求。

80020

编程5分钟,命名2小时!聊聊命名规则!

例如,因为同一作用范围内两样不同东西不能重名,你可能会随手改掉其中一个名称,有时干脆错误拼写充数,结果就会出现在更正拼写错误后导致编译器出错情况。...但如果你已经有一个名为zork变量,又想调用一个名为theZork变量,麻烦就来了。 废话都是冗余。variable一词永远不应当出现在变量名。table一词永远不应当出现在表名。...窃以为单字母名称仅用于短方法本地变量。名称长短应与其作用域大小相对应 [N5]。若变量或常量可能在代码多处使用,则应赋予其便于搜索名称。...成员前缀 也不必用m_前缀来标明成员变量。应当把类和函数做得足够小,消除对成员前缀需要。你应当使用某种可以高亮或用颜色标出成员编辑环境。...代码读得越多,眼中就越没有前缀。最终,前缀变作了不入法眼废料,变作了旧代码标志物。 接口和实现 有时也会出现采用编码特殊情形。

45230

c#多态性   静态多态性函数重载 动态多态性 虚方法

C# 多态性 多态是同一个行为具有多个不同表现形式或形态能力。 多态性意味着有多重形式。在面向对象编程范式,多态性往往表现为"一个接口,多个功能"。 多态性可以是静态或动态。...在静态多态性,函数响应是在编译时发生。在动态多态性,函数响应是在运行时发生。 在 C# ,每个类型都是多态,因为包括用户定义类型在内所有类型都继承自 Object。...多态就是同一个接口,使用不同实例而执行不同操作,如图所示: ? 静态多态性 在编译时,函数和对象连接机制被称为早期绑定,也被称为静态绑定。C# 提供了两种技术来实现静态多态性。...以下实例创建了 Shape 基类,并创建派生类 Circle、 Rectangle、Triangle, Shape 类提供一个名为 Draw 虚拟方法,在每个派生类重写该方法绘制该类指定形状。...抽象方法和虚方法区别 1.虚方法必须有实现部分,抽象方法没有提供实现部分,抽象方法是一种强制派生类覆盖方法,否则派生类将不能被实例化。 2.抽象方法能在抽象类声明,虚方法不是。

1.5K10

C# 继承、多态性、抽象和接口详解:从入门到精通

C# 继承在 C# ,可以将字段和方法从一个类继承到另一个类。我们将“继承概念”分为两类:派生类(子类) - 从另一个类继承类基类(父类) - 被继承类要从一个类继承,使用 : 符号。...例如,考虑一个名为 Animal 基类,它有一个名为 animalSound() 方法。...为了实现安全性——隐藏某些细节,只显示对象重要细节。注意:抽象也可以通过接口实现C# Interface接口是在 C# 实现抽象另一种方式。...接口不能包含构造函数(因为它不能用于创建对象)。为什么以及何时使用接口?1) 为了实现安全性 - 隐藏对象某些细节,仅显示重要细节(接口)。2) C# 不支持“多继承”(一个类只能继承一个基类)。...注意:抽象也可以通过接口实现C# 接口接口是在 C# 实现抽象另一种方式。

31710

编程5分钟,命名2小时!聊聊命名规则!

例如,因为同一作用范围内两样不同东西不能重名,你可能会随手改掉其中一个名称,有时干脆错误拼写充数,结果就会出现在更正拼写错误后导致编译器出错情况。...但如果你已经有一个名为zork变量,又想调用一个名为theZork变量,麻烦就来了。 废话都是冗余。variable一词永远不应当出现在变量名。table一词永远不应当出现在表名。...窃以为单字母名称仅用于短方法本地变量。名称长短应与其作用域大小相对应 [N5]。若变量或常量可能在代码多处使用,则应赋予其便于搜索名称。...成员前缀 也不必用m_前缀来标明成员变量。应当把类和函数做得足够小,消除对成员前缀需要。你应当使用某种可以高亮或用颜色标出成员编辑环境。...代码读得越多,眼中就越没有前缀。最终,前缀变作了不入法眼废料,变作了旧代码标志物。 接口和实现 有时也会出现采用编码特殊情形。

89520

编程5分钟,命名2小时!

例如,因为同一作用范围内两样不同东西不能重名,你可能会随手改掉其中一个名称,有时干脆错误拼写充数,结果就会出现在更正拼写错误后导致编译器出错情况。...但如果你已经有一个名为zork变量,又想调用一个名为theZork变量,麻烦就来了。 废话都是冗余。variable一词永远不应当出现在变量名。table一词永远不应当出现在表名。...窃以为单字母名称仅用于短方法本地变量。名称长短应与其作用域大小相对应 [N5]。若变量或常量可能在代码多处使用,则应赋予其便于搜索名称。...成员前缀 也不必用m_前缀来标明成员变量。应当把类和函数做得足够小,消除对成员前缀需要。你应当使用某种可以高亮或用颜色标出成员编辑环境。...代码读得越多,眼中就越没有前缀。最终,前缀变作了不入法眼废料,变作了旧代码标志物。 接口和实现 有时也会出现采用编码特殊情形。

52420

第2章 C#程序设计基础

C#每条语句 “;” 字符结尾。 2. C#提供了两种注释方法:单行注释和 多行注释 。 3. C#值类型包括简单类型、 结构类型 和枚举类型。 4....C#中区分重载方法条件是:不同参数类型或者 不同参数个数 。 11. C#多态性分为 编译多态性 和运行时多态性。 二、简答题 1. 简述C#简单类型由哪几种数据类型组成?...如果一定要用C#关键字作为变量名,则应使用“@”作为前缀,但强烈建议不要这样做。关键字是对C#编译器具有特殊意义预定义保留字,如if、for、while等。...(4)C#变量名最多可以由511个字符组成,建议变量名不要太长,一般超过31个字符为宜。 5. 叙述C#声明匿名变量需要注意哪些问题。...接口中只能定义方法、属性、事件和索引器这四种类型成员,但不能在接口中声明字段。并且在接口定义,只能存在这些成员声明,不能对这些成员进行实现,对这些成员实现需要通过类来完成。

1.8K40

C#编码规范2 C#编码规范

3.2 模块头部注释规范 一个物理文件为单元都需要有模块头部注释规范,例如:C#.cs文件 用于每个模块开头说明,主要包括:(粗体字为必需部分,其余为可选部分) 文件名称(File Name...一般情况下,这将涉及到 标记使用。 对可从当前编译环境获取异常引用。 得以引用描述源代码类型和成员另一文件注释。...3> 要采用大小写混合,提高名字可读性。为区分一个标识符多个单词,把标识符每个单词首字母大写。采用下划线作分隔字符写法。     ...保证对接口标准实现名字只相差一个“I”前缀,例如对IComponent接口标准实现为Component;   l 泛型类型参数命名:命名要为T或者T开头描述性名字,例如:     public...避免引用时冲突和混淆;   5> 方法命名   l 第一个单词一般是动词;   l 如果方法返回一个成员变量值,方法名一般为Get+成员变量名,如若返回值 是bool变量,一般Is作为前缀

2.6K91

扩展方法必须在非泛型静态类定义

它们第一个参数指定该方法作用于哪个类型,并且该参数以 this 修饰符为前缀。 仅当你使用 using 指令将命名空间显式导入到源代码之后,扩展方法才位于范围。...说明 尽管标准查询运算符没有显示在 String  IntelliSense ,但它们仍然可用。 在编译时绑定扩展方法 可以使用扩展方法来扩展类或接口,但不能重写扩展方法。 ...与接口或类方法具有相同名称和签名扩展方法永远不会被调用。 编译时,扩展方法优先级总是比类型本身定义实例方法低。 ...换句话说,如果某个类型具有一个名为 Process(int i) 方法,而你有一个具有相同签名扩展方法,则编译器总是绑定到该实例方法。 ...下面的示例演示编译器如何确定要绑定到哪个扩展方法或实例方法。 示例 下面的示例演示 C# 编译器在确定是将方法调用绑定到类型上实例方法还是绑定到扩展方法时所遵循规则。

1.8K10

C# 8小特性

对于C# 8,有吸引了大多数注意力重大特性,如默认接口方法和可空引用,也有许多小特性被考虑在内。本文将介绍几例可能加入C#未来版本小特性。...\\ 在一个名为“逐字插入字符串”中肯提案,该语法将得到扩展,接受@$\”。对它解释将和逐字插入字符串($@\”)完全相同,因此,你再也不用担心弄反了。...\\ 允许using语句结构匹配IDisposable \\ 接口C#编译器之间存在着奇怪关系。...\\ 在这个提案,using语句也将支持结构匹配。这乍看之下没什么用,因为你不会希望看到一个可释放类没有实现IDisposable。不过,有一种名为ref struct新类型。...\\ 这还不是一个正式提案,可能会合并到前面提到“using”语句修改

35310

C# 关于 T 泛型

通过使用泛型接口,可以定义通用接口规范,适应不同类型实现。...由于使用了泛型接口,我们可以保证在调用接口方法时传入正确数据类型,并且在编译时进行类型检查。...它允许在方法定义时指定具体数据类型,而是在调用方法时根据需要传入实际类型。...,因此上一行代码可简化为: Del m2 = Notify; 在泛型类定义委托,可以和类方法相同方式来使用泛型类类型参数。...如果用上泛型那么就可以写一遍搞定,也提高了代码可维护性和可扩展性。 然后就是类型安全。泛型提供了编译时类型检查好处,这意味着编译器可以在编译时捕获并阻止匹配类型错误。

26540

从零开始学C#——基本语法(二)

基本语法 (菜鸟系列学习教程) C#,又名Csharp,天朝喜欢叫C井。 C#是一种面向对象编程语言。在面向对象程序设计方法,程序有各种相互交互对象组成。...C#注释 注释是用于解释代码。编译器会忽略注释条目。...在C#程序,多行注释/*开始,并以字符*/终止, /*这是C#编程语言多行注释 这是C#编程语言多行注释 这是C#编程语言多行注释*/ 单行注释是用‘//’符号表示, //这是C#语言单行注释...在C#,类命名必须遵循如下基本规则: 标识符必须字幕或下划线(_)开头,后面可以跟一系列字幕、数字或下划线。标识符第一个字符不能是数字。...标识符不能是C#关键字 C#关键字 关键字是C#编译器预定义保留字,这些关键字不能有做标识符,但是,弱国你想使用这些关键字作为标识符,可以在关键字前面加上@字符作为前缀

65620

27 个问题,告诉你Python为什么这么设计

为什么能在表达式赋值? 为什么Python对某些功能(例如list.index())使用方法来实现,而其他功能(例如len(List))使用函数实现?...为什么 join()是一个字符串方法而不是列表或元组方法? 异常有多快? 为什么Python没有switch或case语句? 难道不能在解释器模拟线程,而非得依赖特定于操作系统线程实现吗?...CPython退出时为什么释放所有内存? 为什么有单独元组和列表数据类型? 列表是如何在CPython实现? 字典是如何在CPython实现为什么字典key必须是不可变?...如果没有这样前缀,如果值来自不受信任源,攻击者将能够调用对象上任何方法。 难道不能在解释器模拟线程,而非得依赖特定于操作系统线程实现吗?...如何在Python中指定和实施接口规范? 由C++和Java等语言提供模块接口规范描述了模块方法和函数原型。许多人认为接口规范编译时强制执行有助于构建大型程序。

6.6K11

【JavaSE专栏22】一文吃透Java包机制

通常,包名使用小写字母,并以域名反转形式作为前缀确保唯一性。 在实际编写 Java 源文件时,包声明应该是第一个非注释行。...public:公共访问修饰符,被声明为public类、接口方法和变量可以被同一包其他类、不同包类以及跨包类访问。...默认(不使用任何修饰符):默认访问修饰符,当没有指定任何访问修饰符时,默认情况下类、接口方法和变量具有默认访问权限。默认访问权限限定了只能在同一包中进行访问,不同包类无法访问。...private:私有访问修饰符,被声明为private类、接口方法和变量只能在声明它们类内部访问,其他任何类都无法访问。...通过合理地选择访问修饰符,可以对包内部类、接口方法和变量进行细粒度访问控制,达到合理组织代码、保护数据安全以及隐藏实现细节目的。

42720

C# 发展历史及版本新功能介绍

可以对泛型类进行约束访问特定数据类型方法。 在泛型数据类型中所用类型信息可在运行时通过使用反射来获取。 分部类型 可以将类或结构、接口方法定义拆分到两个或更多个源文件。...各个部分可以指定不同接口,最终类型将实现所有分部声明所列出全部接口。 在某一分部定义声明任何类、结构或接口成员可供所有其他部分使用。 最终类型是所有部分在编译组合。...匿名类型 匿名类型提供了一种方便方法,可用来将一组只读属性封装到单个对象,而无需首先显式定义一个类型。 类型名由编译器生成,并且不能在源代码级使用。 每个属性类型由编译器推断。...C#一旦使用this关键字标记了某个静态方法第一个参数,编译器就会在内部向该方法应用一个定制attribute,这个attribute会在最终生成文件元数据持久性存储下来,此属性在System.Core...为了通过类型简单名称(没有命名空间前缀)来使用类型,可以导入该类型所有在命名空间,但这样做时候,你没有办法阻止那个命名空间中扩展方法也被导入进来。

4.2K20

预览 C# 10 新东西

下面的两个类定义是等价。如果你添加了 required 关键字,那么就无法在设置 Name 属性情况下将Person 实例化。编译器会抛出错误,无法编译。...编译器将对推断 lambda 签名提供更好支持,而且还可以添加特性。话可以显式指定返回类型,帮助编译器理解 lambda。...var f = static void (_) => Console.Write("Help"); ❝感谢 Schooley 提出了一个不那么容易混淆特性例子 interface 最后,将有可能在接口上指定静态方法和属性...我知道这将是一个有争议的话题,就像给接口添加默认实现一样。我不喜欢它。然而,这可能非常有趣。想象一下,你可以指定一个接口默认值或指定创建方法。...我最喜欢是对命名空间改变和对接口改进。总之,未来是光明 C# 。嗯嗯...

38640

了解C#协变和逆变

这些示例假定一个名为 Base 基类和一个名为 Derived派生类。 Covariance 使你能够使用比原始指定类型派生程度更大类型。...在C#,目前只有泛型接口和泛型委托可以支持协变和逆变, 协变(Covariance) 内置泛型协变接口,IEnumerator、IQuerable、IGrouping<Tkey, TElement...: 泛型参数占位符out关键子标识,并且占位符T只能用于只读属性、方法或者委托返回值,out简而易懂,就是输出意思 当要进行类型转换,占位符T要转换目标类型也必须是其基类,上述例子则是Foo隐式转为...、方法或者委托输入参数 当要进行类型转换,占位符T要转换目标类型也必须是其子类,上述例子则是FooBase转为Foo 总结 协变和逆变只对泛型委托和泛型接口有效,对普通泛型类和泛型方法无效 协变和逆变类型必须是引用类型...,因为值类型不具备继承性,因此类型转换存在兼容性 泛型接口和泛型委托可同时存在协变和逆变类型参数,即占位符T 参考 泛型协变和逆变 | Microsoft Docs 《你必须知道.NET(第2

91110

C#学习笔记之一】C#关键字

C#关键字 关键字是对编译器具有特殊意义预定义保留标识符。它们不能在程序中用作标识符,除非它们有一个 @ 前缀。例如,@if 是有效标识符,但 if 不是,因为 if 是关键字。...分部类型定义允许将类、结构或接口定义拆分到多个文件。 readonly 声明一个字段,该字段只能赋值为该声明一部分或者在同一个类构造函数。 sealed 指定类不能被继承。...分部类型定义允许将类、结构或接口定义拆分到多个文件。 readonly 声明一个字段,该字段只能赋值为该声明一部分或者在同一个类构造函数。...文字关键字(C# 参考) C# 有下列文字关键字: null true false default 上下文关键字(C# 参考) 上下文关键字用于提供代码特定含义,但它不是 C# 保留字。...Partial — 部分 在整个同一编译单元内定义分部类、结构和接口。 remove 定义一个自定义事件访问器,客户端代码取消订阅事件时将调用该访问器。 set 为属性或索引器定义访问器方法

2.4K50
领券