是否有区别:
public T RequestedValue { get; set; }
Run Code Online (Sandbox Code Playgroud)
和
public T RequestedValue;
Run Code Online (Sandbox Code Playgroud)
?
取自此代码:
public class PropertyChangeRequestEventArgs<T>:EventArgs
{
public PropertyChangeRequestEventArgs(T pRequestedValue)
{
RequestedValue = pRequestedValue;
}
public T RequestedValue { get; set; }
}
Run Code Online (Sandbox Code Playgroud) 我对C#有点新,但我在编程方面有相当广泛的背景.
我正在尝试做什么:为游戏定义不同的MapTiles.我已经像这样定义了基本的MapTile类:
public class MapTile
{
public Texture2D texture;
public Rectangle mapRectangle;
public MapTile(Rectangle rectangle)
{
this.mapRectangle = rectangle;
}
}
Run Code Online (Sandbox Code Playgroud)
然后我定义一个子类GrassTile,如下所示:
class GrassTile : MapTile
{
new Texture2D texture = Main.GrassTileTexture;
new public Rectangle mapRectangle;
public GrassTile(Rectangle rectangle) : base(rectangle)
{
this.mapRectangle = rectangle;
}
}
Run Code Online (Sandbox Code Playgroud)
在我的Main类中,我正在创建一个像这样的新maptile:
Maptile testTile;
testTile = new GrassTile(new Rectangle(0, 0, 50, 50);
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试渲染此testTile时,其纹理最终为null.如果我在MapTile中定义纹理,我的代码工作正常,所以它与我以前的实现无关.
那么我怎样才能让GrassTile能够修改MapTile的成员变量纹理呢?或者让我的主类识别GrassTile的纹理,而不是MapTile,我也搞乱了接口,但我不能声明接口成员变量.我还没有得到C#继承的其他内容吗?
提前致谢
可能重复:
C#.NET 3.5+中属性和字段之间的差异
使用之间有什么区别
public string Username { get; set; }
Run Code Online (Sandbox Code Playgroud)
和使用
public string Username;
Run Code Online (Sandbox Code Playgroud)
我一直在使用第一个,但想了解两者之间是否有任何区别,以及一个场景应该优先于另一个场景的情况。
在这个例子中,Foo.Something和Bar.Something之间有什么有效的区别吗?
class Foo
{
public string Something;
}
class Bar
{
public string Something{get; set;}
}
class Program
{
static void Main(string[] args)
{
var MyFoo = new Foo();
MyFoo.Something = "Hello: foo";
System.Console.WriteLine(MyFoo.Something);
var MyBar = new Bar();
MyBar.Something = "Hello: bar";
System.Console.WriteLine(MyBar.Something);
System.Console.ReadLine();
}
}
Run Code Online (Sandbox Code Playgroud)
AFAIK他们的行为完全相同.如果他们为什么不在Foo中使用普通的字段?在java中,我们使用setter来强制执行新的不变量而不会破坏代码和getter来返回安全数据但是在c#中你总是可以将Foo重写为:
class Foo
{
private string _Something;
public string Something
{
get {
//logic
return _Something;
}
set {
//check new invariant
_Something = value;
}
}
}
Run Code Online (Sandbox Code Playgroud)
旧代码不会被破坏.
在最近的一次C#和WPF中,我喜欢C#的属性:
public double length_inches
{
get { return length_metres * 39.0; }
set { length_metres = value/39.0; }
}
Run Code Online (Sandbox Code Playgroud)
当然,注意到length_metres可能会从字段变为属性,而代码无需关心.WPF还可以非常愉快地将UI元素绑定到对象属性.
当我第一次学习类和对象时,我认为有一种方法可以做到,因为它看起来很明显!隐藏类中复杂性的关键在于您不再需要关心存储的内容.但直到现在才看到它.
有趣的是,我第一次看到它在VB.Net中完成.OO纯度的前沿.
问题是,我可以重新使用我经常使用的其他语言的属性,比如javascript,python,php吗?在javascript中,如果我将一个变量设置为一个闭包,我不会再次获得闭包,而不是它的结果吗?
我正在制作一个小程序,它将抓取我的硬盘并显示在给定驱动器中找到的文件列表.
我的想法是拥有一个基本的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)
两者都不能被改变吗?
我不明白静态属性之间的区别:
public static int intId;
Run Code Online (Sandbox Code Playgroud)
并得到 特性:
public int intId
{
get
{
return intId;
}
set
{
intId = value;
}
}
Run Code Online (Sandbox Code Playgroud)
这两者有什么区别?他们的工作方式相同或不同?
现在学习ASP MVC,仅仅是我在MVC上的第3周
我对建模传递做了一些测试,基本上控制器只是获取模型,并且没有做任何事情就进入视图,但似乎代码失败了.
下面是我创建的ViewModel
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace Bank2.Models.ViewModel
{
public class PaymentView
{
public List<Wires_SWIFT> lists{get; set;}
public string b_str{get; set;}
public string o_str{get; set;}
}
}
Run Code Online (Sandbox Code Playgroud)
这是视图:
@model ViewModel
@using(Html.BeginForm("Payment","Home",FormMethod.Post)){
@Html.TextBoxFor(d=> d.o_str)<br/>
@Html.TextBoxFor(d=> d.b_str)<br/>
<input type="submit" name="Search">
}
Run Code Online (Sandbox Code Playgroud)
控制器抓住模型并立即通过
...
[HttpPost]
public ActionResult Payment(ViewModel m){
return View(m)
}
...
Run Code Online (Sandbox Code Playgroud)
我在texbox中键入了两个字符串:比如"aa"和"bb",在我点击提交后,他们应该在那里,因为相同的对象被传回,但现在该字段为空
我是否错过了关于建模传递的重要内容?欢迎任何形式的建议
除了较少的代码行之外,还需要了解使用自动属性的好处吗?
我们最初使用如下:
private int sample;
public int Sample
{ get {return sample};
set {this.sample=value};
}
Run Code Online (Sandbox Code Playgroud)
现在我们直接设置它.为什么我们用来定义一个私有变量?
c# ×9
properties ×5
asp.net-mvc ×1
c#-3.0 ×1
field ×1
get ×1
inheritance ×1
javascript ×1
php ×1
python ×1
set ×1
static ×1
variables ×1