关于 public 和private ,字段和属性, set和get的疑问

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于 public 和private ,字段和属性, set和get的疑问相关的知识,希望对你有一定的参考价值。

比如:
private string name;
public string Name

getreturn name; // 问题一:这时 字段就是name,属性就是Name
setstring name=value; // 代码 缩写:public string Name get; set; 吗?


那么
private string Name;
public string name //问题二: 这时,字段是Name吗? 属性是name吗?

getreturn name; //问题三:这代码缩写成 public string Name get; set; 还是
setstring name=value; // private string Name get; set; ??

1、首先private 与public 即是私有的与公有的。 也就是说:private 定义的属性或者方法只本身能够访问。 public 是拥有该对象实例就可以访问。

问题一: 理解的是正确的,c#语音命名规则 属性一般都是小写字母打头等等。

你问题二问的 也可以那么写,但缩写不可以Name明显的方法与属性区分不了了。
其实你完全可以尝试

public string Nam_1

getreturn name; // 问题一:这时 字段就是name,属性就是Name
setstring name=value; // 代码 缩写:public string Name get; set; 吗?

其实效果是一样的只是一个别名而已。
关键你自己能够区分追问

好像更不懂了 。那好吧我换个方式问 :“
1、public string Name get; set; 不缩写的源代码

2、private int Age get; set ; 不缩写的源代码

2代码是我老师写的代码 表示完全把我掌握的知识点颠覆了 ,求解

追答

比如2的代码在ClassA 面
又有个ClassB

在ClassB里面
ClassA cla=new ClassA();
cla.Name可以访问
但cla.Age访问不到
这个就是私有与公有的区别、

而2 比如2的代码仍然是在ClassA里面
//表示给age属性赋值为1
private void init()
this.Age=1;


1、public string Name get; set; 不缩写的源代码
public string Name

get return name;
set name = value;

2、private int Age get; set ; 不缩写的源代码

private string Age

get return age;
set age = value;


访问修饰符不一样而已。

追问

你说的我都知道 我想知道的只有一个 :(这不是完整的 ,我会写这个 ,完整的不会写,就是先private string xx ,再public string xx 那种)

2、
pxxxx int xxx;
private int Age

get return age;
set age = value;

追答

private int age

参考技术A 字段 和 属性 都是同一个fields的不同叫法
从你的代码里可以看出 这个类有两个属性或者字段 分别是name 和 Name

你的set get 方法 只是对name进行的赋值 和 读取,而且set get 方法写得有点乱
正常来说 类的属性 一般都只赋予 private 权限,以确保不在其他的代码处被修改,只能通过set get方法来操作
参考技术B 你写的什么东西。private string name;定义的是字段,一般get和set方法就是setName和getName,实际上set方法名后面的才是属性,如果你写成setXxx时,Xxx就是属性,因为私有的变量不能在外部使用。

php 定义类属性和方法的public protected private 修饰词的区别

这三个词在定义类的属性和方法时使用,其最大的区别在与他们作用域不同
public :全局使用,不仅是本类,其子类,创建的对象都可以使用,甚至子类的子类由于继承关系,也可以使用.
protected:本类和其子类使用,如果后续有继承的话,
private : 仅限本类使用

    class ClassA
    {
        public $a = 1;
        protected $b = 2;
        private $c = 3;
        public function share() {
            echo \'a=\'.$this->a."\\n";
            echo \'b=\'.$this->b."\\n";
            echo \'c=\'.$this->c."\\n";
        }
        protected function fuZi() {
            echo \'a=\'.$this->a."\\n";
            echo \'b=\'.$this->b."\\n";
            echo \'c=\'.$this->c."\\n";
        }
    }

    class ClassB extends ClassA
    {
        public function  jiCheng() {
          echo  \'我是B类继承了protected的属性b=\'.$this->b."\\n";
          echo  \'我是B类继承的protected方法\'.parent::fuZi()."\\n";
        }
        //
        /*protected function fuzi()
        {
            echo \'i am b\';
        }*/
    }
    class ClassC extends ClassB
    {
        public function Cji() {
            echo \'我是C类继承了B类a=\'.$this->a."\\n";
            echo \'我是C类继承了B类b=\'.$this->b."\\n";
            $this->fuZi();
            }
    }
    $classB = new ClassB();
    $classB->jiCheng();//经过测试继承的protected方法属性都可以获取

    $classC = new ClassC();
    $classC->Cji();

执行结果如下图
由于B继承了A,C又继承了B,因此就将A里protected属性和方法传递到了C,如果在B里面使用函数的覆盖,会发现C类里的fuZi函数也跟着变化,这说明protected属性的作用域是本类和子类,如果在子类中进行了覆盖,后续使用将是新的函数,将代码中B类fuZi函数注释释放,得到下图结果:

以上是关于关于 public 和private ,字段和属性, set和get的疑问的主要内容,如果未能解决你的问题,请参考以下文章

子类对父类中的属性和字段的改写

作为模块化字段访问修饰符的 Dim、Global、Public 和 Private 有啥区别?

为啥定义接口的方法和属性前面没有修饰符(public、private、protected)? [复制]

S1/C#语言和数据库技术基础/03-使用属性升级MyBank

类和对象

public private protected 修饰符整理