注册 登录
编程论坛 C# 论坛

求高手解答c#中属性与方法的具体区别????

lyb151 发布于 2010-03-02 20:46, 6352 次点击
真不知道属性与方法的本质分别,?
16 回复
#2
外部三电铃2010-03-02 21:51
属性可以理解成对象的变量
方法可以理解成对象的函数
#3
yms1232010-03-02 21:58
楼主肯定是被C#里的属性过程与属性搞混了,属性过程与属性是两个不一样的概念,虽然在.NET里两者都显示为属性,但是两者是不一样的。
属性的严格写法是
public class a
{
    public string a;
    public int b;
}
这个才叫属性,属性是一个类的变量,属性作为变量不承担任何计算过程。
而属性过程则不同
属性过程的写法
public class a
{
   private string a;
   private int b;
   public string a
   {
      get
      {
          return this.a;
      }
      set
      {
          this.a=value;
      }
   }
   public int b
   {
      get
      {
          return this.b;
      }
      set
      {
          this.b=value;
      }
   }
}
属性过程则不同,属性过程可以理解为特殊的方法或函数,这个方法只有一个参数并且只能返回一个值。
属性过程的作用在于,对输入数据的有效性处理
设想一下用户注册这个功能
用户注册有一个用户类
用户类有一个属性用户名
public class user
{
    public string username;
}
而通常限制用户注册用户名不能为空要在用户界面去限制。
user Objus=new user();
if(Objus.username==null)
{
   throw new Exception("用户名不能为空");  
}
这样写的确没错,但是如果你登陆里也要限制用户名不能为空,用户修改资料里也得限制,这时候还得写一遍上面的代码,而这样就会有很多重复的代码。
就算你能复制粘贴,这些代码也是重复的每回你也要复制粘贴才可以。
如果用属性过程
public class user
{
    private string _username;
    public string username
    {
       get
       {
          return this._username;
       }
       set
       {
          if(value==null)
          {
             throw new Exception("用户名不能为空");
          }
          this._username=value;
       }
    }
}
这时你登陆界面只需两行代码就验证了用户名不能为空
user Objus=new user();
Objus.username=this.Textbox1.Text;
就两行就可以,其他地方也是一样,这就是属性过程。
方法就不用说了吧?
方法就是一个类的函数这些知识楼主应该知道吧?
#4
chanchanyuan2010-03-03 13:24
属性是 变量, 方法是数。
前者放数据,后者是操作处理代码
#5
bing12012010-03-03 16:05
学习了
#6
mervyn2010-03-03 16:24
感觉和其他语言的熟悉和方法差不多啊
一个人的类,他的属性可能有人.胳膊 人.腿
方法可能是让她说话,走路等
#7
lyb1512010-03-04 18:44
回复 4楼 liangliang11
谢啦,这个
public string Name
        {
            get { return _name; }
            set { _name = value; }
和一般的属性
pubic int nem;
有什么区别?
#8
lyb1512010-03-04 18:45
谢谢各位楼主,但是为什么总是用
public string Name
        {
            get { return _name; }
            set { _name = value; }
来描述属性呢,有什么具体作用。
#9
~栀子花~2010-03-04 21:38
受教
#10
yms1232010-03-04 22:01
以下是引用lyb151在2010-3-4 18:45:21的发言:

谢谢各位楼主,但是为什么总是用
public string Name
        {
            get { return _name; }
            set { _name = value; }
来描述属性呢,有什么具体作用。
作用我已经说了,还不明白吗?属性过程的作用在于对输入输出数据进行有效处理。
虽然
方法1
public class user
{
  public string Name
  {
        get { return _name; }
        set { _name = value; }
  }
}
等效于
方法2
public class user
{
  public string Name;
}
不同在于,现在要求Name不为空,并且长度不可以超过6个字符。
方法2你要验证Name不为空你只能在类外面对象创建后验证,而方法1虽然也要创建对象,但是是在类内部就进行了验证。
哪个方便?你可以自己思考一下。
#11
qubo19822010-03-05 11:25
假设有一个对象:门
它的颜色 是它的属性
关门    是一个方法
属性就是放在那里,用不用它都在那里,
方法,就是你要用的时候它才有效果
就像门的颜色,门在那里,它就是这个属性,而"关门"需要"关"的时候才有意义
#12
sz7312002432014-12-30 10:14
回复 3楼 yms123
本来还很疑惑
看过之后就秒懂了~!!
谢谢
#13
txxb2015-02-28 12:59
以下是引用yms123在2010-3-4 22:01:03的发言:

作用我已经说了,还不明白吗?属性过程的作用在于对输入输出数据进行有效处理。
虽然
方法1
public class user
{
  public string Name
  {
        get { return _name; }
        set { _name = value; }
  }
}
等效于
方法2
public class user
{
  public string Name;
}
不同在于,现在要求Name不为空,并且长度不可以超过6个字符。
方法2你要验证Name不为空你只能在类外面对象创建后验证,而方法1虽然也要创建对象,但是是在类内部就进行了验证。
哪个方便?你可以自己思考一下。

等我在电脑上了再问下
#14
txxb2015-02-28 13:41
属性:
public class user
 {
   public string Name
   {
         get { return _name; }
         set { _name = value; }
   }
 }

方法2:
 public class user
 {
    private string name;
    public string Name(string n)
    {
        name = n;
        return name;
    }
 }
这两个,有什么区别??
1