关于C#中的简单继承

  • 本文关键字:简单 继承 关于 c#
  • 更新时间 :
  • 英文 :


我有一个关于C#中简单继承的问题。

这是代码:

  class Mammal
  {
    int age { get; set; }
    public Mammal(int age)
    {
      this.age = age;
    }
  }
  class Dog : Mammal
  {
    string breed { get; set; }
    public Dog(int age, string breed)
    : base(age)
    {
      this.breed = breed;
    }
  }
  class Program
  {
    static void Main(string[] args)
    {
      Dog joe = new Dog(8, "Labrador");
      Console.WriteLine("Joe is {0} years old dog of breed {1}", joe.age, joe.breed); // gives error
    }
  }

这会产生错误,因为它无法访问年龄和品种参数。所以我分别在《哺乳动物》和《狗》课上公布了年龄和品种。这使得程序运行良好。

但我的问题是,理想情况下,参数不应该是私有的还是非公共的,并且只能通过公共方法访问?如果是这种情况,那么我如何访问Program类中的非公共参数?

感谢

自动属性本质上是方法(它们被编译为get_set_方法)。通过将它们标记为public,它们将与您所描述的一样,这很好。

你只需要隐藏局外人不应该访问的信息。你的用例表明,外部调用者必须有权访问这些属性,所以将它们标记为public是可以的。

如果不希望外部调用程序set该值,则可以将该特定访问器标记为privateprotected。。同时使get接入者为公共:

public int Age { get; private set; }

此外,请将属性中的第一个字母大写。

在代码中,agebreed是属性。通过编写public get; private set;,可以分别控制对getset方法的访问。那会达到你想要的!

此外,请考虑在构建对象后更改对象的年龄和种类在程序中是否有意义。如果没有,则可以将它们设为public readonly字段。

由于没有提供访问修饰符,它使用默认的访问权限。然而,在大多数情况下,你的逻辑是正确的。你应该尽量藏起来。因此,在现实中,根据情况,我可能会提供public getter和private setter——或者不提供。关键是你可以自由地做你喜欢的事情,只要它能带来正确的结果。

在C#中,您所拥有的是创建一个始终只能通过其getter和setter访问的变量(当然是隐含的),因为这确实是最好的实践,尽管并不经常实现。

所以这里:

[访问][类型][名称]{[access]get;[>访问>集;}

我们可以控制对参数的访问,但参数本身。很明显,因为您已经做到了,所以您还可以将某些不需要查看的字段设置为私有字段,这是一种不那么实现的方式。通常,无论访问权限如何,变量都会进行某种形式的验证,因此使用如上所述的私有参数对您来说是有利的,因为验证可以放在setter中,并允许使用MyClass.Something = somethingElse;System.Console.Write(MyClass.Something);进行更简单的语法。

how can I access the non-public parameters in Program class的答案是你不能(不进行反射),因为你可以控制哪些成员变量、属性和方法暴露给你的派生类和实例化类。

数据封装是一件好事,您应该使用它来降低调用代码修改类中不应该访问的数据的风险。

private在类之外永远不可用,当您希望所有人都可以访问时,需要将其设为public;当您希望属性/变量/方法仅在继承类中可以访问时需要将其设置为protected

最新更新