A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 吴承烨 中级黑马   /  2013-6-16 16:21  /  1885 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 吴承烨 于 2013-6-16 23:40 编辑

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace 封装
{
    class Preson
    {
        //姓名,性别,年龄,自我介绍
        //姓名
        string name;

        public string Name
        {
            get { return name; }
            set { name = value; }
        }
        //性别
        string sex;

        public string Sex
        {
            get { return sex; }
            set { sex = value; }
        }
        //年龄
        int age;

        public int Age
        {
            get { return age; }
            set { age = value; }
        }
       //方法
        public  void SayHello() //这里为什么不能用static
        {
            Console.WriteLine("我的名字叫{0},今年{1}岁,性别{2}",Name,Age,Sex); //这里用属性变量和字段变量有什么区别,用字段有什么优点.
        }
    }
}

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

8 个回复

倒序浏览
本帖最后由 nilaoyededie 于 2013-6-16 16:49 编辑

static 静态的 外面是访问不到的 你就调用不到了
public 公共的  谁可以可以访问
属性 get读set写   控制外面对属性读写操作的    只有get为只读外面调用不能改变字段的值   只有set只写 几乎不用 只写不读的意义不大
我的理解   就这么多了

我从书上看的
get访问器相当于一个具有属性类型返回值的无参数的方法,它用于向外部返回属性成员的值,除了作为赋值目标,当表达式应用属性时,将调用该属性的getget访问器以计算该属性的值

set 访问器相当于一个具有单个属性类值参数和void返回尅型的方法,set的访问器的隐形参数始终命名为value。当属性作为赋值目标或者作为++/——运算符的操作数被引用时,机会调用set访问器所传递的参数将提供新值。

读写属性 同时含有set和get的属性
只读属性 只具有get的属性,将只读属性作为赋值目标时会导致编译器错误
只写属性 只具有set的属性,除了作为赋值目标外,在表达式中引用只写属性时编译器时错误

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 陈壹 于 2013-6-16 16:37 编辑

public  void SayHello() //这里为什么不能用static
个人理解,在自定义类中声明方法,一般都是调用本类中的字段跟属性,如果加上static 则这些方法跟属性都得加上static,才能确保调用的便利
在方法中使用属性跟字段有什么区别?
属性是为了确保字段的赋值与取值正确性而存在,为公用性质为public,字段则只在本类的方法中使用为private,我们在其他类得方法中对属性赋值实质上是通过属性
对相应字段进行赋值,属性本身相当于一种方法。
在本类方法中使用字段好处是不经历循环,但是你难以保证赋值是否正确

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

回复 使用道具 举报
Console.WriteLine("我的名字叫{0},今年{1}岁,性别{2}",Name,Age,Sex);
你这个地方是用的属性,你如果想对这个方法static的话
那么你的属性也要定义成static
因为static声明的成员中不能直接调用非static成员
可以用对象.成员名 但你这里是不存在用对象调用的,所以不能对这个方法static

字段是一个类私有的东西,一般不会给字段声明为public访问,其他类不能修改字段的值
如果声明为public ,那么在其他类中就可以对他进行值的修改,但想想可以知道人有两个眼睛是人这个类的特性,是不允许在其他类中修改的

属性是可以进行非法值判定的,别人传入一个value 如果value不符合字段值的规范
比如说Age属性的要求是大于0岁,如果别人输入-1岁 那么就可以在get方法中不返回-1 而返回0 这里的作用就是起到了非法值的判定

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

回复 使用道具 举报
谢谢大家热情参与
回复 使用道具 举报
说白了就是一句话,static方法也就是静态方法不能使用非static的变量

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

回复 使用道具 举报
因为静态方法..不能使用非静态成员.

静态方法不依懒对象的存在而存在

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

回复 使用道具 举报
静态方法不能使用非静态成员
非静态方法可以使用静态成员
回复 使用道具 举报
用static访问修饰符修饰的方法不能使用非static的变量
若此句使用static
其一:类成员的访问修饰符禁止访问该成员。Name,Age,Sex皆不能访问
其二:SayHello();受保护级别限制      构造时无法访问
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马