C# 接口和类的属性差异

C# 接口和类的属性差异,c#,oop,C#,Oop,众所周知,接口只能声明成员,我们在继承自该接口的类中实现这些成员 那么有什么区别呢?为什么我必须在类中重新声明属性?它不能使用接口中的声明吗?在您的示例中,您定义了属性必须在接口中具有get和set。在类中以相同的方式定义它们会创建一个“Auto属性”,它代表您处理实现,创建支持变量,等等 如果您想进一步深入了解自动属性,请参阅,了解有关自动属性的更多信息。接口定义了一个契约,实现它的类必须遵守该契约才能编译。接口没有说明必须如何实现,只是说明它满足接口。例如,您已经为Name创建了一个字符串属

众所周知,接口只能声明成员,我们在继承自该接口的类中实现这些成员


那么有什么区别呢?为什么我必须在类中重新声明属性?它不能使用接口中的声明吗?

在您的示例中,您定义了属性必须在接口中具有get和set。在类中以相同的方式定义它们会创建一个“Auto属性”,它代表您处理实现,创建支持变量,等等


如果您想进一步深入了解自动属性,请参阅,了解有关自动属性的更多信息。

接口定义了一个契约,实现它的类必须遵守该契约才能编译。接口没有说明必须如何实现,只是说明它满足接口。例如,您已经为Name创建了一个字符串属性,该属性必须公开getter和setter

您的Car实现使用自动属性来满足接口。然而,你可以这样写你的车:

interface IVehicle
{
    int Id { get; set; }

    string Name { get; set; }

    void Print();          
}

class Car : IVehicle
{
    public int Id { get; set; }

    public string Name { get; set; }

    public void Print()
    {
        Console.WriteLine($"Id {Id} Name {Name}");
    }
}
这将是完全有效的,因为它仍然公开一个带有getter和setter的字符串属性名

第一次创建汽车时,汽车myCar=新车;,它的属性将具有默认值。但您可以修改这些值:

class Car : IVehicle
{
    public int Id { get; set; }

    private string _name;

    public string Name { get { return _name; } set { _name = value; } }

    public void Print()
    {
        Console.WriteLine($"Id {Id} Name {Name}");
    }
}

我不明白你的要求。您似乎理解接口和类之间的区别。您确实在类中实现了这些属性。至于使用值创建它们,您需要创建一个汽车实例,然后为汽车的属性赋值。您实现了这些属性,但没有为它们赋值,这很好,因为它们将有一个默认值。接口定义了类必须实现的内容。这就是区别。这一点,以及其他许多问题,都可以通过把一本不错的入门书交给c来回答。接口定义了一个契约,实现它的类必须遵守该契约才能编译。接口没有说明必须如何实现,只是说明它满足接口。例如,您已经为name创建了一个字符串属性,该属性必须公开getter和setter。您的汽车使用自动属性来满足界面要求。然而,你可以这样写你的车:私人字符串_name;公共字符串名{get{return{u name;}set{{u name=value;}}}这将是完全有效的,因为它仍然使用getter和setters公开字符串属性名。int Id{get;set}在IVehicles公共int Id{get;set;}在Car中它们的含义不同?@faizan Intefaces不需要指定访问修饰符。这是因为接口描述了类必须创建的公共可访问契约。所以在接口中加入public是多余的,但是实现接口的类必须将接口描述的所有内容都公开
IVehicle myCar = new Car();
myCar.Name = "The General";

//alternate syntax using object initializer
IVehicle schoolBus = new Car { Name = "Magic School Bus" };