c# - 我应该用 get 声明我的抽象类的属性吗?放;?

标签 c# c#-3.0 properties field

我正在制作一个小程序,它将抓取我的硬盘驱动器并显示在给定驱动器中找到的文件列表。

我的想法是有一个基本的 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;        
    }
}

我是否应该像这样声明每个属性的简写代码:

public string name { get; set; }

任何指导都会有所帮助。谢谢。 :)

编辑:

我的意思是从字面上替换这一行:

public string name;

用这一行:

public string name { get; set; }

最佳答案

首先,“属性”在这里不是正确的术语。当您声明一个定义了 get 和/或 set(正式名称为“访问器”)的类的成员时,您就是在定义一个属性。属性是公开私有(private)字段值的便捷方式,因为您可以向获取和设置机制添加逻辑。

其次,当您声明一个成员 name 时,您已经通过

public string name { get; set; } 

编译器会将其扩展为以下内容:

private string _name;
public string name {
    get {
        return _name;
    }
    set {
        _name = value;
    }
}

也就是说,编译器会自动为你创建一个支持字段并定义访问器。这些被称为“自动属性”(对人而言)1

第三,永远不要2公开公开字段。因此,如果您想将字符串 name 公开为公共(public)接口(interface)的一部分,最好将其作为属性公开。首先,它提供了更好的封装。其次,它可以在派生类中声明为虚拟的并被覆盖。第三,您可以拥有自定义逻辑。第四,您可以在属性的读写机制之间有不同级别的可访问性,但不能在字段上。

第四,根据公认的命名约定,公共(public)属性应命名为 CamelCase所以你应该更喜欢 Name 而不是 name

1:抱歉,我已经等了很长时间才开这个玩笑。

2:几乎没有。

关于c# - 我应该用 get 声明我的抽象类的属性吗?放;?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2204259/

相关文章:

typescript - 使用扩展语法时如何删除对象的属性以创建对象的新实例?

c# - C# 中的惰性字典属性

c# - 使用 C# ASP.NET 将 Word 文档内容传输到服务器端的 Web 环境

c# - 部署具有 MSI 的容器实例并且部署到该实例的容器无法读取 keyvault secret

c# - 跨项目访问和更新变量 C#

c# - 在 windows 启动时设置 c# windows 应用程序

generics - 扩展方法Dictionary <TKey,TValue> .RemoveAll?是否可以?

c# - Windows 8.1 应用程序中的事件日志记录

C#:List<T>.ForEach(...) 比普通 foreach 循环有什么好处?

c# - 将自定义对象属性映射回原始对象