Tag: 虚拟

如何创建虚拟音频设备

我正在开发一个C#项目,我需要创建几个虚拟音频设备。 后来我将自己做一些切换。 也许有人知道一个很好的库,可以让我自己做问题。 创建音频设备的实例。 (商业还可以,但免费.dll会更好) 另一种可选解决方案是找到一种能够根据我的需求创建虚拟音频设备的软件。

虚拟属性和延迟加载

根据定义,虚拟属性或方法是要被覆盖的子类可见的方法。 但是,例如NHibernate使用虚拟属性来确保延迟加载。 我的问题不是关于NHibernate,而是如何使用虚拟属性来实现延迟加载? 是否有任何关于我不知道的虚拟属性的隐藏行为?

在构造函数中访问已实现的抽象属性会导致CA2214:不要在构造函数中调用可覆盖的方法

public abstract class MyBase { public abstract bool MyProperty { get; protected set; } } public class MyClass : MyBase { public MyClass() { this.MyProperty = true; } public override bool MyProperty { get; protected set; } } 构造函数MyClass()导致CA2214: 不要在构造函数中调用可覆盖的方法。 这通常仅显示是否调用与构造函数在同一类中定义的虚方法。 例如,在MyBase的构造函数中访问MyProperty 。 这里我在派生类的构造函数中调用inheritance的抽象属性的非虚拟重写实现 。

虚拟类中的抽象方法

我有一个具有许多虚方法的ac #Class,其中一些方法基本上是抽象的(它们完全在子类中实现,基类是空的)。 为了让它进行编译,我在基类中抛出一个InvalidOperationException,并对应该做什么做出评论。 这只是感觉很脏。 有没有更好的方法来设计我的课程? 编辑:对于将在加拿大运行的应用程序的中间层,一半的方法是通用的,因此是虚拟的。 一半的方法都是省特定的。 Public class PersonComponent() { public GetPersonById(Guid id) { //Code to get person – same for all provinces } Public virtual DeletePerson(Guid id) { //Common code } Public virtual UpdatePerson(Person p) { throw new InvalidOperation(“I wanna be abstract”); } Public Class ABPersonComponent : PersonComponent { public override DeletePerson(Guid id) […]

将字符转换为相应的虚拟键代码

目前,我正在使用Win32 API中的方法VkKeyScan将字符转换为其虚拟键代码。 但这似乎有的问题是,当我传递小字母时,它工作正常,而当我传入大写字母时,它不返回适当的密钥代码,类似于“(”或“}等特殊字符”。 我该怎么做呢? 无论如何我是否可以直接将字符串转换为虚拟等效字符而不考虑它是否包含大写字符或特殊字符? 谢谢

C#与C ++中的虚拟调用速度

我似乎记得在某个地方读过C#虚拟调用的成本并不像在C ++中那么高。 这是真的? 如果是这样 – 为什么?

用虚拟方法覆盖抽象方法

我试图在子类中使用虚方法覆盖抽象类中的抽象方法。 我(假设到现在?)理解抽象方法和虚方法之间的区别。 显然我无法做到,但我的问题是……为什么? 基于此处接受的答案和以下场景,我只是没有看到问题: public abstract class TopLevelParent { protected abstract void TheAbstractMethod(); } public class FirstLevelChild1 : TopLevelParent { protected override void TheAbstractMethod() { } } public class FirstLevelChild2 : TopLevelParent { protected virtual override void TheAbstractMethod() { //Do some stuff here } } public class SecondLevelChild : FirstLevelChild2 { //Don’t need to re-implement […]

覆盖部分类中的虚方法

我目前正在使用nopCommerce源代码并尽力避免编辑源代码,而是使用与源代码分开的部分类和插件,我们是否需要升级版本。 我想通过在同一个程序集中使用部分类来对下订单的代码进行一些更改: Orignal源代码: namespace Nop.Services.Orders { public partial class OrderProcessingService : IOrderProcessingService { public virtual PlaceOrderResult PlaceOrder(ProcessPaymentRequest processPaymentRequest) { //…. 我的部分课程: namespace Nop.Services.Orders { public partial class OrderProcessingService : IOrderProcessingService { public override PlaceOrderResult PlaceOrder(ProcessPaymentRequest processPaymentRequest) { //…. 当我尝试编译此代码时,我收到一个错误: 类型’Nop.Services.Orders.OrderProcessingService’已经使用相同的参数类型定义了一个名为’PlaceOrder’的成员 但我使用override ,原始类中的方法是virtual ,有人可以告诉我这里我出错了,以及如何覆盖此方法?

多态性和铸造

我想了解c#中的多态性,所以通过尝试几个构造我想出了以下案例: class Shape { public virtual void Draw() { Console.WriteLine(“Shape.Draw()”); } } class Circle : Shape { public override void Draw() { Console.WriteLine(“Circle.Draw()”); } } 我理解为了将Draw()消息发送到几个相关对象,所以他们可以根据自己的实现行事我必须更改(在这种情况下)形状’指向’的实例: Shape shape = new Circle(); shape.Draw(); //OK; This prints: Circle.Draw() 但是,为什么,当我这样做时: Circle circle = new Circle(); circle.Draw(); //OK; This prints: Circle.Draw() Shape shape = circle as Shape; // or […]

没有身体的虚拟方法

我在抽象类中查看一些代码: public virtual void CountX(){} public virtual void DoCalculation() { …code} 如果在派生类型中不必强制覆盖它,为什么要在抽象类中声明一个空的虚方法?