private readonly string m_magazineName;
private readonly DataTime m_pubDate;
public PubEventArgs(string magazineName,DataTime pubData)
{
m_magazineName=magazineName;
m_pubData=pubData;
}
public string magazineName
{
get { return m_magazineName;}
}
public DataTime pubData
{
get { return m_pubData;}
}
这个怎么来解释啊,总是不太明白,写属性的时候 public string magazineName老是想为什么不写成public string m_magazineName然后来个get { return magazineName;}这样肯定错,可我还是不明白
哪位高手能指点下,或者来个简单的比喻不,谢谢

解决方案 »

  1.   

    public PubEventArgs(string magazineName,DataTime pubData) 

    m_magazineName=magazineName; 
    m_pubData=pubData; 

    这个的目的不就是把magazineName附值给m_magazineName那可不可以不要下面的属性,要属性的目的是什么啊,呵呵
      

  2.   

    private readonly string m_magazineName; 
    表示m_magazineName是类的成员变量,只能被类的内部调用,外部无法修改当我们需要外部去使用该成员变量时,其实我们完全可以将private改成public,这样m_magazineName就能够被外部访问和修改了(当然这里因为设置为readonly,也无法修改)。但是这并不是一个好的解决方法,因为这使得我们内部使用的变量完全暴露给外界,失去了封装性。为了解决这个问题,使得我们能对m_magazineName的访问和修改得到控制,我们就是用属性(Property),正如你的程序里表示的public string magazineName 

        get { return m_magazineName;} 
    } 这样外界就能通过调用magazineName这个属性来访问m_magazineName了。建议你找本C#的书籍来看看,一般都会对这个有解释的
      

  3.   

    magazineName 是属性名,你想定义成什么就定义成什么
    而m_magazineName是一个字段,你还能重复性的把它定义成一个属性吗
    而return m_magazineName是返回m_magazineName的值,而你的magazineName是一个属性名,它有值吗
      

  4.   

    而你的readonly也是可以去掉的,因为你已经把m_magazineName和m_pubDate定义成了私有的,且在通过属性访问时你只有get只读访问器而没有set写访问器
      

  5.   

    我这有以前写的一些资料,给你帖出来自己看吧
    本节课将介绍C#的属性,其目的包括:
    1.理解什么是属性2.如何实现属性3.创建一个只读属性4.创建一个只写属性属性是C#中独具特色的新功能。通过属性来读写类中的域,这具有一定的保护功能。在其它语言中,这是通过实现特定的getter和setter方法来实现的。C#的属性具有保护功能,可以让你就象访问域一样访问属性。要了解属性的用法,我们先来看看如何用传统的方法对域进行封装。1.清单 10-1. 传统的访问类的域的例子:ACCESSors.cs using System;
    public class PropertyHolder
    {
    private int someProperty = 0;
    public int getSomeProperty()
    {
    return someProperty;
    }
    public void setSomeProperty(int propValue)
    {
    someProperty = propValue;
    }
    }public class PropertyTester
    {
    public static int Main(string[] args)
    {
    PropertyHolder propHold = new PropertyHolder();
    propHold.setSomeProperty(5);
    Console.WriteLine("Property Value: {0}", propHold.getSomeProperty());
    return 0;
    }
    } 说明 1.清单 10-1 演示了用传统方法访问类的域的例子。PropertyHolder类有个我们感兴趣的域someProperty, PropertyHolder类带有两个方法:getSomeProperty和setSomeProperty。getSomeProperty方法返回someProperty域的值。SetSomeProperty方法设置域someProperty的值。2.类PropertyTester使用类PropertyHolder中的方法来获取someProperty域的值。Main方法中新创建了一个PropertyHolder对象,之后通过使用setSomeProperty方法,调用propHold对象的setSomeProperty方法,设置其值为5。之后,调用Console.WriteLine方法输出属性值。对propHold对象的getSomeProperty的调用,是用来获取属性值的。它输出"Property Value: 5"到控制台。3.这种传统的访问域的信息的方法是很好的,因为它支持面向对象的封装的概念。如果在对域someProperty的实现中,域的类型从int 类型变为byte类型,上述的方法仍然适用。现在,如果采用属性的话,其实现会做得更为平滑。2.清单 10-2. 使用属性访问类的域:Properties.cs using System;
    public class PropertyHolder
    {
    private int someProperty = 0;
    public int SomeProperty
    {
    get
    {
    return someProperty;
    }
    set
    {
    someProperty = value;
    }
    }
    }public class PropertyTester
    {
    public static int Main(string[] args)
    {
    PropertyHolder propHold = new PropertyHolder();
    propHold.SomeProperty = 5;
    Console.WriteLine("Property Value: {0}", propHold.SomeProperty);
    return 0;
    }
    } 说明 
    1.清单 10-2 演示了如何创建和使用属性。PropertyHolder类中有个"SomeProperty" 属性的实现。注意:属性名的首字母必须大写,这是属性名"SomeProperty"和域名"someProperty"的唯一区别。属性有两种访问操作:get和set。Get访问操作返回的是someProperty域的值。Set访问操作是设置someProperty域的值,其值为"value"的内容。Set访问符号后面的"value"是C#中的保留字。通常,在其他场合下使用"value"关键字会出错。。
    2.PropertyTester 类使用PropertyHolder类中的SomeProperty属性。在Main方法的第一行中, 创建了PropertyHolder对象propHold。之后,把propHold对象的 someProperty 域的值设置为5,很简单,就象对域赋值一样,给属性赋值。3.Console.WriteLine方法输出 propHold对象的someProperty域的值。这是通过使用propHold对象的SomeProperty属性来完成的。很简单,就象对域赋值一样,赋值给属性。属性可以设置为只读的,这可以通过在属性的实现中只设一个get访问符号来实现。3.清单 10-3. 只读属性: ReadOnlyProperty.cs using System;
    public class PropertyHolder
    {
    private int someProperty = 0;
    public PropertyHolder(int propVal)
    {
    someProperty = propVal;
    }
    public int SomeProperty
    {
    get
    {
    return someProperty;
    }
    }
    }public class PropertyTester
    {
    public static int Main(string[] args)
    {
    PropertyHolder propHold = new PropertyHolder(5);
    Console.WriteLine("Property Value: {0}", propHold.SomeProperty);
    return 0;
    }
    } 说明 
    1.清单10-3 演示了如何实现只读属性。PropertyHolder类中,SomeProperty 属性只有一个get访问操作,没有用到set访问操作。PropertyHolder类中还有个接受整型参数的构造函数。2.在PropertyTester类的Main方法中,创建了新名为propHold的PropertyHolder类的对象。propHold对象在实例化时,调用了带参数的PropertyHolder构造函数。在本例中,参数值为5,这对propHold 对象的someProperty域的值进行了初始化。3.因为PropertyHolder 类的SomeProperty属性是只读的,所以没有其他的方法来设置someProperty域的值。如果你插入了"propHold.SomeProperty = 7"语句到程序清单中,该程序编译将不会通过,因为SomeProperty是只读属性。在Console.WriteLine 方法中使用SomeProperty属性时,程序执行正常。这是因为该方法调用了SomeProperty属性的get访问操作,这是个只读操作。4.清单 10-4. 只写属性: WriteOnlyProperty.cs using System;
    public class PropertyHolder
    {
    private int someProperty = 0;
    public int SomeProperty
    {
    set
    {
    someProperty = value;
    Console.WriteLine("someProperty is equal to {0}", someProperty);
    }
    }
    }public class PropertyTester
    {
    public static int Main(string[] args)
    {
    PropertyHolder propHold = new PropertyHolder();
    propHold.SomeProperty = 5;
    return 0;
    }
    } 说明 1.清单 10-4 演示了如何创建和使用只写属性。这一次,在PropertyHolder类中的SomeProperty属性中,去掉了get访问操作,而加上了set访问操作。其功能是输出someProperty域的值。2.在PropertyTester 类中的Main方法中,用缺省的构造函数对PropertyTester类进行初始化。之后,使用propHold 对象的SomeProperty属性,设置该域的值为5。这就调用了propHold 对象的set访问操作, 把someProperty 域的值设置为5,最后,把"someProperty is equal to 5"的信息输出到控制台。小结
    现在,你已经了解了什么是属性,以及属性的使用方法,你也了解了使用属性和使用传统的类的方法之间的区别。属性可以是只读的,也可以是只写的,每种场合下的使用方法,你都有所了解。
      

  6.   

    好好,如果直接public string m_magazineName 就失去了类的封装性了,