我正在制作一个小程序,它将抓取我的硬盘并显示在给定驱动器中找到的文件列表.
我的想法是拥有一个基本的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) 以下两个声明之间的主要区别是什么?
public string Name
{
get { return "Settings"; }
}
Run Code Online (Sandbox Code Playgroud)
和
public const string Name = "Settings";
Run Code Online (Sandbox Code Playgroud)
两者都不能被改变吗?
这是2013年12月13日.
我有一个List <>,希望绑定到DataGridView.它有效,但今天它不起作用.
public class ExamResult
{
public string ID;
public bool Result;
public bool ReviwerResult;
public string QuestionFileName;
}
Run Code Online (Sandbox Code Playgroud)
然后创建List:
List<ExamResult> result = new List<ExamResult>();
Run Code Online (Sandbox Code Playgroud)
创建ExamResult的实例并为其成员分配值,然后将其添加到List:
//Create a Instance of ExamResult:
ExamResult examResult = new ExamResult();
//Assign Value to members:
examResult.ID="001";
examResult.Result=false;
examResult.ReviewerResult=true;
examResult.QuestionFileName = string.empty;
//Add examResult Instance to List<ExamResult>
result.Add(examResult);
Run Code Online (Sandbox Code Playgroud)
然后尝试将它绑定到我的WinForm应用程序上的DataGridView.
this.DataGridView.AutoGenerateColumns = true;
this.DataGridView.DataSource = result;
Run Code Online (Sandbox Code Playgroud)
但DataGridView不显示任何东西!
我发誓这段代码有效,现在它无法正常工作!不改变代码.
问题是什么?
首先,我已经阅读了询问字段和属性之间差异的问题,我知道它的用途.
现在回答我的问题,我想创建一个属性,我确信get和set都是空的,所以我这样做get; set;.一切都很好.但是现在我意识到我刚刚创建了一个带有大写名称的公共领域,它在各方面都是相同的.
即使是使用它的论点,因此未来的代码也不能依赖于实现,因为我可以简单地将其作为属性并实现getter或setter.字段和属性的语义在它定义的类之外是相同的.
所以我的问题是,当一个房产只是使用时,我应该使用一个字段或一个属性get;set;吗?
所以这:
public IEnumerable<string> Products;
Run Code Online (Sandbox Code Playgroud)
在各方面都是相同的:
public IEnumerable<string> Products { get; set; }
Run Code Online (Sandbox Code Playgroud) 我正在尝试在列表之间创建一个检查,但我没有运气:-/
我有一个包含 100 个字段的游戏板,并进行此循环以仅将空字段添加到新列表中:
for(int i = 0; i < thisGame.boardFields.Count; i++)
{
if (thisGame.boardFields.Count != 0 && thisGame.boardFields [i] != null)
{
BoardField thisField = thisGame.boardFields [i];
if (thisField.owner == "0" && thisField.number != 13)
{
Tile tTile = new Tile();
tTile.color = thisField.color;
tTile.number = thisField.number.ToString();
tempBoard.Add (tTile);
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后我遍历玩家 5 块瓷砖,看看玩家是否有一块不可玩的瓷砖,例如,具有相同对象的空字段不可用,如下所示:
for (var i = 0; i < thisGame.playerTiles.Count; i++)
{
Tile tempTile = new Tile();
tempTile.color = thisGame.playerTiles[i].color;
tempTile.number = thisGame.playerTiles[i].number.ToString();
if (!tempBoard.Contains (tempTile)) …Run Code Online (Sandbox Code Playgroud) 我正在询问使用 getter 和 setter 的建议。我在两个版本中编写了相同的代码:使用 getter 和 setter 以及仅使用类方法。而且我看不出它们之间的区别。
我用私有字段评级编写了类 Book。并且构造函数 Book 可以通过 RatingSetter 或 RatingMethod 为 Book.rating 分配一些东西。RatingMethod 只设置值,但我也可以创建一个仅用于获取值的方法。
class Book
{
public string title;
public string author;
private string rating;
public Book(string title, string author, string rating)
{
this.title = title;
this.author = author;
RatingSetter = rating;
RatingMethod(rating);
}
public string RatingSetter
{
get { return this.rating; }
set
{
if (value == "PG" || value == "PG-13" || value == "R")
{
rating = value;
}
else …Run Code Online (Sandbox Code Playgroud) 我很确定这是重复的,但经过几个小时的搜索/尝试后,我一直无法找到解决方法.
我不是高级程序员,但我有相当数量的C++经验.我正在尝试学习C#并且在使用非常基本的语法方面遇到麻烦,特别是对于访问其他类.我一直在寻找简单的例子,而且绝大多数情况下,我发现的所有东西似乎都使用了一个巨大的类,其中使用了main方法,因此这些例子并没有太大帮助.
我想开发一个包含多个.cs文件(每个文件中有一个类)的解决方案,以及另一个包含我将用于测试的主要方法的.cs文件.我的解决方案名为DIVAT.我有一个Dealer.cs文件,其中包含以下代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace DIVAT
{
public class Dealer
{
public List<Tuple<int, string>> deck;
Dealer()
{ // default constructor
Console.Out.WriteLine("Default constructor called. (Dealer class)");
string [] suitValue = {"c", "d", "h", "s"};
for(int i = 2; i <= 14; i++){
for(int j = 0; j <= 3; j++){
deck.Add(new Tuple<int, string>(i, suitValue[j]));
}
}
}
~Dealer()
{// destructor
Console.Out.WriteLine("Destrcutor called. (Dealer class)");
}
Tuple<int, string> Dealer.getCard(int cardNum)
{// getter
return deck[cardNum];
} …Run Code Online (Sandbox Code Playgroud) 假设我有一个Customer带有一些属性的类:
public class Customer
{
public string CustAddr = GetCustAddr(); //Long procedure returning address
public double CustAcct = GetCustAcct(); //Long procedure returning account
public string CustInvoice = GetCustInvoice(); //Long procedure returning invoice
}
Run Code Online (Sandbox Code Playgroud)
该类通过函数返回:
public Customer GetData(string query)
{
Customer cust = new Customer();
//set the values for each of the properties
return cust;
}
Run Code Online (Sandbox Code Playgroud)
现在它正在返回整个类,我可以像这样使用它:
lblDisplay = GetData("QUERY").CustAddr.ToString();
Run Code Online (Sandbox Code Playgroud)
但是,假设每个属性都需要花费大量时间来计算.如果我只想要CustAddr值,它仍然可以计算CustAcct并且CustInvoice可用于我.
我如何改变我的功能只返回我正在寻找的属性,除了将我的班级分成单独的程序来调用?例如,我可以:
lblDisplay = GetCustAddr().ToString();
Run Code Online (Sandbox Code Playgroud)
但那不是我想要的.我认为将所有数据放在有组织的结构中而不是一堆不同的过程中会更好.
通过阅读,我确定我正在经历与进入WPF时大多数人相同的过程。我来自嵌入式的挣扎。
以这些例子
int foo; //
int foo { get; set; } //c#
public int foo{ get => foo; set => foo= value; }
private int _foo;
public int foo{ get => _foo; set => _foo= value; }
Run Code Online (Sandbox Code Playgroud)有人可以给我一个明确的答案,为什么所有吸气剂和吸气剂。
-它只是一个视觉工作室及其自动完成设置吗?
-是因为线程和foo在幕后被标记为易失性吗?
-还是发生了其他事情。
跟进
任何学习和为数据绑定而苦苦挣扎的人,“ 580”回复中“绑定”下的链接是迄今为止我所遇到的最好的例子,可以帮助您理解语法。我还遇到了Visual Studio的“ ReSharper”,它使您了解错误以及使用正确方法进行修复的正确方法。使用示例和重新磨合器,我在3小时内比上周了解了更多信息。
我只需要知道这两行之间有什么区别
private string somestring => "string";
private string somestring = "string";
Run Code Online (Sandbox Code Playgroud)
它们只是在控制台上打印相同的用途有什么区别
c# ×10
properties ×3
class ×2
field ×2
winforms ×2
c#-3.0 ×1
constructor ×1
contains ×1
datagridview ×1
list ×1
operators ×1
string ×1