可能重复:
大家好,
我只是感到惊讶的是,为什么我们在C#中有C#,而在默认情况下,C#中的引用类型是作为引用传递的。
简单地说,有人能解释一下这两个方法调用之间的区别吗?
public void Test(SomeClass someClass)
{
// some code here
}
和
public void Test(ref SomeClass someClass)
{
// some code here
}
在我看来,它们都提到了相同的记忆位置。
那么,为什么我们需要ref关键字呢?
我有如下的C#代码:
int[] A = new int[] {1, 2, 3};
fun(A);
// A at this point still says 1, 2, 3.
void fun(int[] A)
{
int[] B = new int[] {4, 5, 6};
A = B;
}
我认为所有数组都是在C#中通过引用传递的。调用fun()后的A不应该反映4、5、6吗?
我正在将一个庞大的项目从c#转换为vb。我遇到的一个问题是,在c#中,我可以这样做:
private ITreeModel _model;
[Category("Data")]
public ITreeModel Model
{
get { return _model; }
set
{
if (_model != value)
{
if (_model != null)
Unbin
如何在c# Xamarin中实现与iOS用于表视图的“委托”或“数据源”模式等效的模式?例如,我希望有这样的视图类:
public class MyDataView : UIView
{
public interface ISource
{
int NumberOfPages();
}
public ISource DataSource { get; set; }
}
但问题是,当我用如下代码从MyViewController调用它时:
this.myDataView.DataSource=new ViewSource(this)
public class View
这些天我一直在学习Java,我刚刚读到的是"Be careful not to write accessor methods that return references to mutable objects",这真的很有趣。现在我想知道C#中的属性和访问器方法是否相同?或者C#已经自动返回克隆副本了?
谢谢。
这是我的c#代码。为什么引用类型不能在C#中更新,下面是代码
class Program
{
public static void Main(string[] args)
{
var a = A.field;
A.field = "2";
Console.WriteLine(a);
Console.Read();
}
}
public static class A
{
public s
在C#的逐引用和逐值概念的上下文中,我有一个关于深度复制和浅拷贝的一般性问题:
在C#中,需要显式创建接受指针/引用的方法,以便能够将指针/引用传递给该方法。但是,作为参数传递给方法/构造函数的对象至少与其他对象的行为不同。如果没有像这里所描述的那样进行额外的克隆,它们似乎总是通过引用传递的:。
为什么对象是通过引用自动传递的?在这种情况下,强迫它们执行克隆过程而不是更像int、double、boolean等对象,有什么特别的好处吗?
下面的代码示例说明了我的意思:
using System;
public class Entry
{
public class MyColor
NET已经很长一段时间了,并且已经开始学习C#。我想我几年前可能问过一件事,得到了答案,但现在已经完全忘记了,因为它不是我经常使用的东西,它是析构函数。在我学习C#的过程中,我读了一篇关于如何在C#中创建这些内容的文章,但这让我感到好奇。假设我实例化了一个具有对象的类到另一个类。
Class C1
{
// Do something here
}
Class A
{
C1 objObjectToClass1 = new C1();
}
Class Main
{
A objObjectToClassA = new A();
}
我把objObjectToClassA对象变
我如何删除对象,即使它有引用(c#或Java)?
例如:
void Main()
{
var f = new Foo();
var person = f.GetPerson();
}
public class Foo
{
private object _person;
public Foo()
{
_person = new object();
}
public object GetPerson()
{
return _person;
}
}
我想从内存中删除_person,我
在创建一个新对象时,我遇到了一个奇怪的问题,该对象包含通过函数使用的另一个对象(paramObj)的参数。因此,paramObj在对象构造函数中使用,但在调用构造函数后,它将被更改。由于C#是按值传递的,所以我不知道为什么会发生这种情况。
我的代码:
void MyFunction(List<string> filesets)
{
foreach(Fileset fs in filesets)
{
//At this point, fs.allFiles.Count is 30. The MyNewObject class
//tak
我无法解释以下行为:
var persona = {nome:"Mario", indirizzo:{citta:"Venezia"}}
var riferimento = persona.indirizzo;
// riferimento ==> {citta: "Venezia"} <-- It is Ok
persona.indirizzo.citta = "Torino";
// riferimento ==> {citta: "Torino"} <-- It is Ok
per
我正在通过C#阅读Jeffrey Richters CLR,他在其中说,使用ref参数,引用本身是通过值传递的。这对我来说是有意义的,看起来类似于指针。
也就是说,在C中,如果我将一个指针传递给一个函数,然后通过malloc赋值给它,它会将指针更改为指向新的内存位置,但是我知道,因为指针本身是一个副本,所以它不会重新分配传递给函数的原始指针。为了完成对函数外部指针的更改,我必须使用双指针。
但是,在C#中:
void Swap(ref Object a, ref Object b)
{
Object t = b;
b = a;
a =t ;
}
很管用。这向我表明引用不
我想知道在C#中什么时候以及为什么引用会被破坏?
下面的代码示例突出显示了这一点:
StringBuilder a = null, b = null;
a = new StringBuilder("a");
b = a;
b.Append("b");
b = null;
Console.WriteLine(a != null? a.ToString() : "null");
Console.WriteLine(b != null ? b.ToString() : "null");
//Output:
ab
nu