我正在制作一个小程序,它将抓取我的硬盘并显示在给定驱动器中找到的文件列表.
我的想法是拥有一个基本的File类,并实现从File.cs类继承的Picture.cs,Video.cs和Document.cs类.
这是我的代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace SharpLibrary_MediaManager
{
public abstract class File
{
public string name;
public string fileType;
public int size;
public DateTime creationDate;
public DateTime modificationDate;
}
}
Run Code Online (Sandbox Code Playgroud)
我应该为每个属性声明这样的简写代码:
public string name { get; set; }
Run Code Online (Sandbox Code Playgroud)
任何指导都会有所帮助.谢谢.:)
编辑:
我的意思是直接替换这一行:
public string name;
Run Code Online (Sandbox Code Playgroud)
用这一行:
public string name { get; set; }
Run Code Online (Sandbox Code Playgroud)
首先,"属性"在这里不是正确的终结.当您声明具有get和/或set定义的类的成员(正式称为"访问者")时,您正在定义属性.属性是公开私有字段值的便捷方式,因为您可以为获取和设置机制添加逻辑.
其次,当你声明成员name为你做通过
public string name { get; set; }
Run Code Online (Sandbox Code Playgroud)
编译器会将其扩展为以下内容:
private string _name;
public string name {
get {
return _name;
}
set {
_name = value;
}
}
Run Code Online (Sandbox Code Playgroud)
也就是说,编译器将自动为您创建一个支持字段并定义访问者.这些被称为"自动属性"(为人们)1.
第三,你永远不应该2公开揭露领域.因此,如果要将字符串name作为公共接口的一部分公开,最好将其作为属性进行.首先,它提供了更好的封装.其次,它可以在dervied类中声明为虚拟和重写.第三,你可以有自定义逻辑.第四,您可以在属性上的读取和写入机制之间具有不同级别的可访问性,但是您不能在字段上.
第四,每个接受的命名对话,公共属性应该用CamelCase命名,这样你应该更喜欢Name而不是name.
1:对不起,我一直在等待很长时间的恶作剧.
2:几乎从不.