首先,为了澄清和避免不必要的重复标记,这个问题不是的副本,也不是的副本,也不是我已经搜索过的其他内容。为什么?他们都谈到了具有经典C#“属性”的公共字段或私有字段。
我的问题是为什么我要写这样的东西(公共属性)
class myClass{
public int AValue{get; set;}
}
当我可以代替(私有字段而不涉及任何属性)(只是典型的旧C++风格的写作方式)
class myClass{
private int aValue;
public int getValue{ return aValue;}
public void setValue(int value){ aVa
我试图在运行时获得一个类成员变量列表。我知道这可能是使用了typeof和反射。但是找不到一个例子。有没有人能帮我解释一下。
下面是伪代码示例:
Class Test01
{
public string str01;
public string str02;
public int myint01;
}
我想要这样的东西(伪代码):
Test01 tt = new Test01();
foreach(variable v in tt.PublicVariableList)
{
debug.print v.name;
debug.print v.type;
}
请帮助我了解如何在
我不明白为什么我的模型没有被填充。发布的所有数据都在Request.Form中,但模型实际上是null。
根据
换句话说,(.)如果缺少任何必需的字段,或者如果提交的值不能转换为所需字段的类型,则整个对象将为空。
我已经更改了几个值类型,但是我无法让它工作。
这是我的模型:
public class AddModel
{
//Get properties
public Vehicle vehicle;
//Post properties
[Required(ErrorMessage = "Please enter a start date
当你有一个变量在对象实例化时是已知的,并且在之后不应该被改变时,应该使用只读字段。
但是,不允许从子类的构造函数中分配只读字段。如果超类是抽象的,这甚至不起作用。
有没有人能很好地解释为什么这不是一个好主意,或者缺乏C#语言?
abstract class Super
{
protected readonly int Field;
}
class Sub : Super
{
public Sub()
{
this.Field = 5; //Not compileable
}
}
PS:当然,你可以通过在超类的受保护构造函数中分配只读字段来达到
我主要来自Java世界。所以,C#属性看起来确实不错。
我知道在C# 3.0或更高版本中,我可以使用自动属性。我更喜欢它:)。
我的问题是关于一个(可能更老的)代码,在那里我可以看到以下内容:
private int age;
public int Age {
get { return age; }
set { age = value; }
}
为什么我需要私有字段年龄?我到底在藏什么?
编辑:
我完全理解getter和setter的需求。我提到过,我来自Java世界,一直在做这件事。
我确实理解C# 3.0或更高版本中的Automatic
(与相关)
如果我有public class Thing { public int X; }、Thing o和指向X字段的FieldInfo fi,为什么调用fi.SetValue(o, null)是合法的?运行时将字段X设置为零,即default(int),而不是报告ValueType不能设置为null。
有没有人知道这种行为背后的设计选择,至少在C#中违反了我的最小惊讶原则?
注意:这是我刚开始C#的时候发布的。有了2014年的知识,我可以真正地说,汽车属性是C#语言所经历的最好的事情之一。
我习惯于使用私有和公共字段在C#中创建我的属性:
private string title;
public string Title
{
get { return title; }
set { title = value; }
}
现在,使用 3.0,我们获得了自动属性:
public string Title { get; set; }
我知道这更多是一个哲学/主观的问题,但是除了为每个字段节省5行代码之外,还有什么理由使用这些自动属性吗?我个人的抱怨是,
下面是一个可以使用NHibernate映射的“简化”类;
public class Template
{
public virtual int Id { get; private set; }
public virtual string Name { get; set; }
}
因为ID字段有一个私有的setter,所以我们不能再在我们的应用程序中有这样的代码,我们手动设置ID字段;
var DefaultTemplate = new Template { ID = (int)TemplateEnum.Default, Name = "Default" }
在这里,我们
我刚刚使用ASP.NET 6.0和C# 10创建了一个新的C# MVC应用程序,在这个项目模板中,默认情况下可以启用Nullable参考类型特性。但是好的,我正在学习如何处理这个特性。
我有以下ViewModel类:
public class CustomerViewModel
{
public string Name { get; set; }
}
为了避免Name字段的Nullable Reference Type警告,我创建了一个构造函数来初始化该字段:
public class CustomerViewModel
{
public CustomerViewModel(s
我正在用C#编写一个数据访问库,我的数据模型类的结构如下(在DataAccess程序集中):
public abstract class DataModel {...} (protected constructor)
public abstract class DataClass {...} (protected constructor)
public abstract class DataField {...} (protected constructor)
public class IntegerField : DataField
{
public IntegerField(Data
在C#中,您可以使用属性使数据字段可公开访问(允许用户直接访问),同时保留对这些直接访问的字段执行数据验证的能力。Java有没有类似的东西?例如,假设存在一个具有以下实现的C#类(如下所示):
public class newInt{
public newInt(){...}
public int x{
get{ return this.x }
set{ this.x = isValid(value) }
}
}
private static int isValid(int value){...}
类中的这个定义允许用户在从数据字段
假设您在一个名为Module1的模块中有这段代码
Option Explicit
Private Type TSomething
Foo As Integer
Bar As Integer
End Type
Public Something As TSomething
在等效的C#代码中,如果您创建了Something字段public,代码将不再编译,因为可访问性不一致--字段的类型比字段本身更难访问。这很有道理。
但是,在VBA中,可以在Module2中使用以下代码
Sub DoSomething()
Module1.Something.Bar = 42
我有一个Blazor应用程序,我在C#中对相关的C#类中的每个剃须刀页面的代码进行编程。我在这个C#代码中使用了公共函数。因此,我不想重复每个类中的公共函数,而是定义一个公共类,然后从每个类调用该函数。我怎么能这么做?我尝试过,就像在C#桌面应用程序中一样,但是它没有工作。
Commonclass test = new Commonclass();
test.CommonFunction();
在获取mongoid和活动记录验证方面有一点困难。
我的模型:
class Project
include Mongoid::Document
field :name
field :public, :type=>Boolean
#validation
validates_acceptance_of :public
end
在我的控制器中,我调用:
Project.create!(:name => 'Test Project', :public => fa
我在C#中遇到了一个非常烦人的线程问题。在使用以下代码时,我收到错误消息“字段初始化器不能引用非静态字段、方法或属性‘Scraper.Form1.scrupeStart()’”:
public partial class Form1 : Form
{
public Thread scrape = new Thread(() => scrapeStart()); //This is where the error happens
public About about = new About();
public Form1()
{
Initia