请考虑以下代码段:
class Window // Base class for C++ virtual function example
{
public:
virtual void Create() // virtual function for C++ virtual function example
{
cout <<"Base class Window"<<endl;
}
};
class CommandButton : public Window
{
public:
void Create()
{
cout<<"Derived class Command Button - Overridden C++ virtual function"<<endl;
}
};
int main()
{
Window *button = new CommandButton;
Window& aRef = *button;
aRef.Create(); // Output: Derived class Command Button - Overridden C++ virtual function
Window bRef=*button;
bRef.Create(); // …Run Code Online (Sandbox Code Playgroud) 在C#中,当我有两个对象obj1时,由a组成的obj2List<string>和我将这两个对象分配给同一个List<string>对象.
如果我对obj1的引用超出范围但我对obj2的引用没有,obj1是否仍然有资格进行垃圾回收,或者是否存在一些依赖性问题,因为仍然存在对该List<string>对象的引用?
我最近问过从另一个班级获取类的唯一实例.
所以,我试图让它工作:
我的Application:
public class Application
{
// I will always have only one instance of Application
private static Application _application;
// Every instance of Application (one in my case) should have its own View
private View view;
// Constructor for new instance of Application
private Application()
{
view = new View();
}
// Getter for my unique instance of Application
public static Application getSharedApplication()
{
if (_application == null)
_application = new Application();
return …Run Code Online (Sandbox Code Playgroud) 我在这里找到了另一个类似问题的线程: Visual Studio 2010:无法显示设计视图, 但在我的情况下,我没有使用自定义控件.
在Win7 32位机器上,我使用Visual Studion 2010使用Visual Basic代码创建一个asp.net Web应用程序.我已将标准Web控件添加到default.aspx表单中.
昨天我保存了项目,在调试模式下运行了一段时间,然后关闭了Visual Studio(自上次保存以来没有进行任何更改).
今天当我打开解决方案并查看default.aspx文件的Design视图时,应该显示的所有控件都说"Error creation control-control-name.对象引用未设置为对象的实例"
我没有改变解决方案.
错误列表中不显示任何错误.Web应用程序构建没有错误.应用程序运行时没有错误(在调试模式下)并在网页上正确显示控件.
我有一个建议,即default.aspx.designer.vb文件可能已过期.建议是删除文件,创建一个同名的空文件,打开解决方案,然后重新保存default.aspx文件以重新生成设计器文件.我这样做了,没有任何影响.
我没有在我的系统上安装任何更新.
我用作网络应用程序的其他VS解决方案仍然很好.他们的设计视图中没有显示此问题.
所有代码都与Visual Studio本地存储在同一台机器上.版本控制未使用.
这实际上是这个项目第二次发生在我身上.它发生在两天前.那时我启动了一个新的解决方案文件,从头开始重新创建default.aspx(和代码隐藏),然后复制到我的其他代码(类,模块和文本文件).这是我现在正在使用的解决方案文件,正如我所提到的,它昨天工作正常.在这两种情况下,当我关闭当天的项目时,我恰巧在表单上有相同的控件集.我没有尝试在表单中添加其他控件.
asp.net web-applications object-reference visual-studio-2010
以下代码的输出让我感到惊讶.我认为"a"应该包含对新创建的对象的引用.有人可以解释为什么结果不是2?
class Program
{
static void Main(string[] args)
{
aclass a = new aclass();
Process(a);
Console.WriteLine(a.number);
Console.ReadLine();
}
static void Process(aclass a)
{
aclass temp = new aclass();
temp.number++;
//Console.WriteLine(temp.number);
a = temp;
a.number++;
//Console.WriteLine(a.number);
}
}
class aclass
{
public int number = 0;
}
Run Code Online (Sandbox Code Playgroud)
编辑:这是一个面试问题.我刚刚意识到我长时间误解了这个概念.参数a与原始参数a不同,尽管它们引用相同的地址.
下面的 C# 代码
ResBlock resBlock1 = new ResBlock();
resBlock1.CustomerID = "ABC";
Block block = new Block();
block.Tag = resBlock1;
resBlock1 = null;
Console.WriteLine(((ResBlock)block.Tag).CustomerID);
Run Code Online (Sandbox Code Playgroud)
输出将是“ABC”。当然,这是我面临的例子,但我的代码要复杂得多。
我想了解的是,是否有一种方法可以获取block.Tag = null引用对象 ( resBlock1) 以null其他方式设置或销毁的时间(哪种方式?)。
类非常简单,因为这只是一个例子:
public class ResBlock: IDisposable
{
public DateTime From { get; set; }
public DateTime To { get; set; }
public string CustomerID { get; set; }
public string ItemID { get; set; }
[...]
public ResBlock() {
DaysStatus = new List<ResBlockDayStatus>();
Deleted = false; …Run Code Online (Sandbox Code Playgroud) 如果您有一个引用其他对象的对象实例A(例如实例B和C),并且您将A二进制序列化为文件,会发生什么?您现在有包含A,B和C的序列化数据吗?
它是如何工作的?如果我反序列化数据,我会得到什么?A,B和C ??
(随意包括内部工作原理解释).
我正在浏览LinkedList并看到了Java中的实现.回到我尝试并实现链接列表的日子里,它有指针和地址以及大量的努力工作.使用Java,实现更容易,但仍然需要我做一些事情.我从链接列表中了解到链接列表,其中1,2,3,4是链表的节点.

但是在java中,我遇到的代码让我将LinkedList视为下图.
Java中链表的实现代码如下,
class LinkedListNode
{
LinkedListNode nextNode = null;//consider this member variable
int data;
public LinkedListNode(int data)
{
this.data = data;
}
void appendItemToLinkedList(int newData)
{
LinkedListNode end = new LinkedListNode(newData);
LinkedListNode temp = this;
while (temp.nextNode != null) { temp = temp.nextNode; }
temp.nextNode = end;
}
}
Run Code Online (Sandbox Code Playgroud)
和
public static void main(String[] args)
{
LinkedListNode list = new LinkedListNode(10);
list.appendItemToLinkedList(20);
list.appendItemToLinkedList(30);
list.appendItemToLinkedList(40);
list.appendItemToLinkedList(50);
list.appendItemToLinkedList(60);
}
Run Code Online (Sandbox Code Playgroud)
在图中,您可以清楚地看到节点对象位于其他节点对象内.它真的是一个链表.或者是一个容纳其他容器的父容器,依此类推?
我在Java中实现单链表,我有一个问题.除了和删除节点之外,很多人都使用这样的临时节点:
public Object removeFirst() {
Node temp = head;
head = temp.next;
Object returnData = temp.data;
temp = null;
size--;
return returnData;
}
Run Code Online (Sandbox Code Playgroud)
为什么这个临时节点是必要的?乍一看,我认为为了删除第一个元素我必须做的就是将第二个元素更改为头节点.
所以我的问题是在java中,object= object意味着什么?继承每个字段和方法,2个对象是否完全相同?
除了检查null(something == null)我们何时在Java中使用对象引用比较?
我想不出任何使用对象引用比较的情况.对于我来说,抽象所有内存分配的语言似乎有点奇怪.
object-reference ×10
java ×4
c# ×3
.net ×2
c++ ×2
object ×2
asp.net ×1
comparison ×1
linked-list ×1
object-graph ×1
polymorphism ×1
singleton ×1