首页  >  文章  >  后端开发  >  C# 中的抽象类

C# 中的抽象类

WBOY
WBOY原创
2024-09-03 15:24:41304浏览

抽象这个词意味着一种思想或想法,它本身没有任何物理形式,但充当其他事物的基础。抽象类背后的概念也是如此。在本文中,我们将讨论 C# 中的抽象类。抽象类是 C# 中无法实例化的特殊类,即不能创建抽象类的对象。抽象类的目的是为其他类的派生提供骨架结构。抽象类没有自己的实现。它们要求开发人员和程序员从抽象类派生并构建骨架结构,即编写其实现。抽象类内部也可以有抽象方法声明。再次强调,这些方法不能有任何定义。

声明抽象类和方法的语法包括在声明之前放置关键字abstract。就这么简单。

语法:

abstract class ClassName
{
public abstract void MethodName();
}

记住,抽象方法不能有定义。因此,抽象方法声明以分号结尾。它们只能被声明。定义必须在派生的非抽象类中提供。

抽象类在 C# 中如何工作?

abstract 关键字指示编译器该类是要在派生类中实现的基类骨架结构。如果编译器发现任何派生抽象基类的类,它会检查所有抽象方法和属性是否在派生类中被重写和实现。

抽象类与接口

现在,您可能想知道这一切是什么以及界面的作用。那么,抽象类与接口有何不同?

让我们通过一个例子来理解这一点。假设我们经营一家出版公司,并聘请了一些编辑为我们的杂志撰写专栏。让我们假设他们是不同类型的专家,撰写的文章将在一周的特定日期发表,并且都以相同的薪水受聘。

让我们为编辑器定义抽象 Employee 类。

代码:

abstract class EmployeeEditors
{
public abstract void Genre();
public abstract string PublishDay();
public int Payment()
{
Console.Write(“Monthly salary is {0}$.”, 1000);
}
}

我们可以轻松实现付款方法,因为我们知道它对所有人来说都是相同的。另外两个方法被声明为抽象方法,由派生类实现。人们可以为从抽象类派生的每个编辑器声明一个普通类,然后可以实现抽象方法来定义流派和日期。现在,假设每个编辑的工资也不同。更改代码的一种方法是将 Payment 方法声明为抽象方法。另一种方法是将整个 EmployeeEditor 声明为一个接口,并给予继承类充分的自由。

Public interface EmployeeEditors
{
public abstract void Genre();
public abstract string PublishDay();
public abstract int Payment();
}

因此,抽象类是其他类构建的基类。而接口是其他类可以参考并从头开始构建的蓝图。

C# 中抽象类的规则

使用抽象类时需要遵循某些规则。

  • 由于抽象类的方法定义不完整,因此无法实例化。任何创建抽象类对象的尝试都会导致编译时错误。
  • 抽象方法不能在抽象类中定义,只能声明。方法体必须在派生类中定义。
  • 派生类必须实现所有抽象方法。
  • 抽象方法不能是静态或虚拟的。

C# 中的抽象类示例

问题陈述:让我们举另一个现实世界的例子。假设您被要求自动执行某个组织的录取通知书生成过程。当前的流程完全是手动的,需要编辑现有的录取通知书,这很容易出错。所有录用通知书中都有一些共同的内容,例如工作地点、工作时间、公司名称、公司品牌等。其他内容例如员工姓名、职位、工资、加入日期等,都是针对每个录用通知书所特有的。录取通知书。

解决方案:您可以为上述目的设计一个抽象类。让我们看看如何。

代码:

ode: using System;
abstract class OfferLetter
{
public abstract string Name(string name);
public abstract string Designation(string designation);
public abstract int Payment(int pay);
public abstract string DOJ(string doj);
public string CompanyName()
{
return "XYZ Corporation Pvt. Ltd.";
}
public string OfficeAddress()
{
return "512, Manhattan, NY";
}
public string CompanyBranding()
{
return this.CompanyName() + " is a privately owned regsitered corporation operating \n under the license provided by the state of New York.";
}
public string Disclaimer()
{
return "This letter and its contents are confidential in nature and are intended only \n for the recipient."+
"\nIf you are not the correct recipient, kindly return it immediately \n to " + this.CompanyName() + " " + this.OfficeAddress() + ".";
}
}
class PrintOfferLetter : OfferLetter
{
public override string Name(string name)
{
return name;
}
public override string Designation(string designation)
{
return designation;
}
public override int Payment(int pay)
{
return pay;
}
public override string DOJ(string doj)
{
return doj;
}
}
public class Program
{
public static void Main()
{
PrintOfferLetter ltr = new PrintOfferLetter();
string empName = "Mr. ABC", designation = "Senior Consultant", doj = "20-02-2020";
int pay = 50000;
Console.WriteLine(ltr.CompanyName() + " is very happy to extend this offer letter to \n" + ltr.Name(empName)
+ " at the designation of " + ltr.Designation(designation) + " with an annual pay of " + ltr.Payment(pay) + "$.");
Console.WriteLine("\nYou are required to report at " + ltr.OfficeAddress() + " from " + ltr.DOJ(doj) + " (dd-mm-yyyy).");
Console.WriteLine("\n\n" + ltr.CompanyBranding());
Console.WriteLine("\n\n" + ltr.Disclaimer());
}
}

输出:

C# 中的抽象类

结论

简而言之,抽象类只是一个不完整或部分完整的类,其他类可以派生并在其之上构建逻辑。在本文中,我们了解了如何声明抽象类,并且它正在工作。我们看到了抽象类的使用以及它们与接口的不同之处的现实生活示例。建议在代码中尽可能多地尝试使用抽象类。这是良好编程的关键实践。

以上是C# 中的抽象类的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn