迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 >

在 C# 中的接口中实现属性

作者:迹忆客 最近更新:2024/02/01 浏览次数:

今天,我们将学习如何在 C# 中的接口中实现属性。

C# 中的接口可以有许多不同的属性,以及指定我们应该如何在其中声明属性可用性的访问修饰符。该接口通常充当不同成员和对象的默认实现。

让我们开始看看我们可以在接口中实现属性的各种方式。


使用简单代码块在界面中设置属性

假设我们在 C# 中创建了一个名为 ENGINE 的接口,并带有 TORQUE 属性。我们将设置界面 ENGINE 如下:

public interface ENGINE {
  int torque { get; set; }
}

因此,我们为它的属性创建了一个具有适当的 getter 和 setter 的接口,称为 TORQUE。要使用该接口,我们必须继续定义一个可以实现该接口的类。

假设我们要定义一个包含 ENGINECAR 类。因此我们可以这样写:

class CAR : ENGINE {
  public int torque { get; set; }
}

请注意,在从此类创建对象时,CAR 类包含公共使用的 TORQUE 实现。要使用 CAR 对象,只需如下调用:

CAR x = new CAR();
x.torque = 989;
Console.WriteLine(x.torque);

因此,你可以使用不同的属性并将它们包含在界面中以供以后使用。这提供了更好的抽象层,并允许在不更改主要方法或类的情况下进行修改。

因此,如果我们想为 ENGINE 添加一个名为 LABEL 的新属性,我们可以在接口 ENGINE 中设置它,该接口可以在类 CAR 中使用。

整个代码如下所示:

using System;

namespace CA_ONE {
  class Program {
    public interface ENGINE {
      int torque { get; set; }
    }

    class CAR : ENGINE {
      public int torque { get; set; }
    }

    static void Main(string[] args) {
      CAR x = new CAR();
      x.torque = 989;
      Console.WriteLine(x.torque);
    }
  }
}

我们已将我们的项目命名为 CA_ONE;因此命名空间扩展并实现它。这里要注意的另一件事是,CARTORQUE 的实现可以在其函数内部有其他定义,例如 PRINT 方法或扭矩转换等。


在 C# 中对接口中的属性进行修改

在上面提供的解决方案中,我们提到了如何在我们的实现中定义其他方法。假设我们想扩展接口 ENGINE 中默认定义的 GETSET 方法。

我们将保持 ENGINE 不变,但倾向于修改扩展它的 CAR 类中的代码。

CAR 中,当我们设置 TORQUE 时,我们可能还想打印 "Torque is Set to _value_" 以便我们的用户知道 TORQUE 属性是否已正确设置。

因此,我们可以继续执行以下操作:

class CAR : ENGINE {
  private int torque_priv;
  public int torque {
    get { return this.torque_priv; }
    set {
      this.torque_priv = value;
      Console.WriteLine("This torque has been set to " + torque_priv);
    }
  }
}

现在在这里,让我们关注代码中发生的事情。我们注意到的第一件事是使用另一个名为 TORQUE_PRIV 的变量。

我们已经实例化了它,因为我们需要存储在以下代码中传递的 TORQUE 值:

x.torque = 989;

如果不是这样,你不使用 TORQUE_PRIV 变量,代码将陷入循环,递归移动以将值分配给 TORQUE 属性。另外,我们在这里使用了一种叫做 VALUE 的东西。

请注意,VALUE 不是变量,而是 C# 中的上下文关键字。VALUE 用于属性和访问声明的集合索引器中。

它获取客户端分配的值并将其分配给类的私有变量。通过这种方式,你可以修改和使用你的声明。

很多人会在 TORQUE 的 setter 中使用以下代码来表示抽象 CAR

this.torque_priv = torque;

对于 GETTER:

return torque;

由于陷入递归循环,这将出现如下错误:

Stack overflow.

在接口中实现任何属性的一般语法如下:

type name { get; set; }

因为多个类可以继承和使用接口,所以在抽象类中扩展和修改属性会更好。在实现不同的方法时,接口可以作为骨干结构,并提供关于什么和什么不扩展的基本概念。

请记住,接口不能直接使用。他们需要在运行代码时初始化和使用抽象类。

接口中的方法始终是公共的,不需要任何隐式访问修饰符。此外,接口可以从其他接口继承。

如果你试图在一个接口中实现一个属性,而另一个接口继承了之前定义的那个,你可以使用一个类来扩展后一个接口。

假设我们有一个接口 ENGINE,它继承 BOLTS,然后被类 CAR 继承。我们想根据每个 CAR 的螺栓尺寸安装一个扳手尺寸的应急套件。

因此,我们可以使用如下实现:

public interface BOLT {
  int size { get; set; }
}

public interface ENGINE : BOLT {
  int torque { get; set; }

然后在类 CAR 中扩展 BOLT 如下:

public int size {
  get { return wrench_size; }
  set {
    // set the wrench size
    wrench_size = value;
    Console.WriteLine("The wrench size to use should be: " + wrench_size);
  }
}

所以你可以看到任何接口都是继承的。如果在基接口中设置属性,则需要在扩展基接口或派生接口的所有类中实现该属性。

因此有必要扩展定义。


在抽象类中实现具有多个接口继承的属性

假设我们有两个界面:ENGINEWHEEL。它们都包含一个启动方法,告诉我们 ENGINEWHEEL 是否已启动。

让我们定义一个启动方法。

public interface WHEEL {
  void print();
}

public interface ENGINE : BOLT {
  int torque { get; set; }
  void print();
}

要在 CAR 类中扩展它,你需要编写一些函数,如下所示:

void WHEEL.print() {
  Console.WriteLine("Wheel has been started");
}
void ENGINE.print() {
  Console.WriteLine("Engine has been started!");
}

要调用它们,请在 main 中编写如下内容:

((WHEEL)x).print();

这是为了指定要使用 print() 方法的接口。


结论

这就是如何在接口中使用属性的全部内容。可能有不同的情况下我们需要设置和使用一个属性; 因此,最好研究上述所有情况。

上一篇:在 C# 中注释文本块

下一篇:没有了

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

在 C# 中注释文本块

发布时间:2024/02/01 浏览次数:192 分类:编程语言

本教程教你如何在 C# 中注释一段文本或代码。作为注解的注释处于更高的抽象级别,编译器在编译 C# 代码时会忽略它。

C# 中的局部类

发布时间:2024/02/01 浏览次数:61 分类:编程语言

我们可以使用 C# 中的局部类将一个类的定义拆分到多个文件中。C# 中的局部类 partial 关键字在 C# 中指定了部分类。

C# 中的结构体和类之间的区别

发布时间:2024/02/01 浏览次数:175 分类:编程语言

结构体是驻留在堆栈中的值类型变量,而类是驻留在堆中的引用类型变量。在本教程中,我们将讨论 C# 中的结构体和类之间的区别和相似之处。

在 C# 中销毁对象

发布时间:2024/02/01 浏览次数:94 分类:编程语言

在 C# 中,我们可以通过给一个对象赋值为空来销毁它。通过在 C# 中分配 null 值来销毁类对象

在 C# 中复制一个对象

发布时间:2024/02/01 浏览次数:120 分类:编程语言

有两种主要方法可用于在 C# 中创建对象的单独副本,MemberWiseClone()函数和参数化构造函数方法。在 C# 中使用 MemberWiseClone() 方法复制对象

C# 中的 Java final 等效关键字

发布时间:2024/02/01 浏览次数:59 分类:编程语言

C# 中有两个不同的关键字,它们等效于 Java 中的 final 关键字,用于类和函数的 sealed 关键字以及用于字段的 readonly 关键字。本教程将讨论与 Java 中的 final 关键字等效的 C# 关键字。Java final 关键

C# new vs override

发布时间:2024/02/01 浏览次数:80 分类:编程语言

override 关键字用于向其父对象显示虚函数的子实现,而 new 关键字用于对其父类对象隐藏子实现。C# 中的 new 关键字 new 关键字 在 C# 中非常常见。

在 C# 中执行带参数的存储过程

发布时间:2024/02/01 浏览次数:196 分类:编程语言

本文讨论如何在 C# 中调用带参数的存储过程。在本指南中,你将了解如何在 C# 中使用参数执行/调用存储过程,这意味着如何在存储过程中传递参数。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便