静态变量在C#中具有与在C++中相同或相似的功能吗?
编辑:
使用C++,您可以在许多不同的上下文中使用静态变量 - 例如:1)全局变量,2)本地函数变量,3)类成员 - C#中的类似用法是否与C++类似?
为什么对象初始化使用new称为动态内存分配的关键字,因为编译时本身我们需要知道该对象所需的内存.
另请说明ClassA object = new ClassA();在堆和堆栈中执行操作时会发生什么.
我想在我的python应用程序中使用C++库.我可以在python中加载dll但是找不到任何关于如何在c ++ dll中创建类的实例并在该onject上调用方法的解决方案.
以下是我所做和想要的
My.dll中的C++代码
class MyClass
{
public:
MyMethod(int param);
}
Run Code Online (Sandbox Code Playgroud)
Python代码
from ctypes import *
myDll = windll.LoadLibrary("My.dll")
Run Code Online (Sandbox Code Playgroud)
我想做以下事情
myClassInstance = myDll.InstantiateMyClass()
myClassInstance.MyMethod(5)
Run Code Online (Sandbox Code Playgroud) 是否可以使用Declarative DataContext和Data Template连接View和ViewModel?
目标:我希望将View与一个ViewModel连接起来用于设计时,另一个用于运行时.目前,对于设计时VM使用Declarative DataContext,为运行时使用Data-Template指定的VM不会按预期运行.
背景 - 有多种方法可以连接View和ViewModel,包括以下内容:
A.)以声明方式在View的XAML中指定ViewModel DataContext.这种技术在Design-Time中非常有用,它使用无参数构造函数传递伪数据.
<UserControl.DataContext>
<my: BrowseAssetsViewModel />
</UserControl.DataContext>
Run Code Online (Sandbox Code Playgroud)
B.)以编程方式指定ViewModel,View和DataContext.
// …Setup code
BrowseAssetsViewModel viewModel = new BrowseAssetsViewModel(assetRegistry, domains);
BrowseAssetsView view = new BrowseAssetsView();
view.DataContext = viewModel;
Run Code Online (Sandbox Code Playgroud)
当方法B与方法A结合使用时,在运行时,WPF将使用ViewModel的版本覆盖方法A中指定的默认DataContext,并使用方法B中指定的参数化构造函数.
C.)为View-ViewModel关联定义数据模板 通过在App.XAML Application.Resources中关联View和ViewModel,WPF可以根据ViewModel的类型连接正确的View.
<DataTemplate DataType="{x:Type vm: BrowseAssetsViewModel }">
<vw: BrowseAssetsView />
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)
如果ViewModel属性绑定到ContentPresenter控件,WPF将连接相应的View(基于ViewModel的类型)并将其放在ContentPresenter中.这在ViewModel呈现的"ViewModel-first"场景中非常有用,WPF通过检查呈现的ViewModel类型来解析并连接正确的View.
问题 - 当将此方法C与方法A结合使用时,WPF会解析正确的视图,但它似乎会重新查询View,通过无参数构造函数(方法A)调用声明性指定的ViewModel,从而覆盖现有的ViewModel属性!
问题 - 有没有办法在没有A无意中覆盖C ViewModel属性的情况下一起使用这些技术(C和A)?
与传统的面向对象,我会(或可能,而)创建一个模型/对象,它表示一个User,与反映性质,即name,id,job title等
然后我可以创建该对象的新实例并将其分配给变量,如果我循环遍历结果集,我可以为每个创建一个实例.使用codeigniter,这似乎是不可能的,如:
$this->load->model('User');
Run Code Online (Sandbox Code Playgroud)
实例化它,并将其放置在$this->user.
有没有办法以更传统的方式使用模型作为对象?但是没有破解CI的做事方式?
我知道你可以使用东西将事物分配给不同的对象名称$this->load->model('User', 'fubar'),但它不像简单地将实例分配给变量那样动态.
任何洞察此事的人都非常感谢.
编辑:感谢答案的人,我认为我错过了工作"Codigniter方式"的重要部分,但我一直在寻找一个贡献的库,以及使用相同实例(分配给codeigniter命名空间)的做法)但每次使用后清除实例变量似乎是一个很好的工作方式,取消了我的预订.
再一次 - 感谢您的帮助和答案.
所以我刚刚在网上找到了这个代码示例,我再次讨论它但很困惑.
通过查看它,我收集的内容(可能是错误的)是它将NumberPrinter类中的print方法传递给Printer对象.但是,该接口也称为Printer,因此我们不是要实例化Printer接口的匿名类,定义方法然后传递它吗?
我的基本问题是,我最初的假设是否正确?如果是这样我认为你无法实例化一个界面?
public class NumberPrinter {
public interface Printer {
public void print (int idx);
}
public static void print (Printer p) {
for (int i = 0; i < 4; i++) {
p.print(i);
}
}
public static void main(String[] args) {
print(new Printer() {
@Override
public void print(int idx) {
System.out.println(idx);
}
});
}
}
Run Code Online (Sandbox Code Playgroud) 我正在重写一些代码以消除全局变量并使类构造函数/析构函数句柄清理某些第三方库资源,但我担心一些代码会从类初始化列表中的另一个成员初始化一个成员.
class MyPodofoDocument {
public:
// generates pdf to stream
MyPodofoDocument(std::stringstream *pStringStream)
: device(pStringStream), document(&device)
{
}
private:
PoDoFo::PdfOutputDevice device;
PoDoFo::PdfStreamedDocument document;
PoDoFo::PdfPainter painter;
};
Run Code Online (Sandbox Code Playgroud)
使用这个类的代码不需要查看使用该库的所有细节,但是我隐藏它们的方式使它依赖于使用成员初始化其他成员,然后才能访问构造函数的实际代码块,在那里它有一个有效的this指针.
它适用于单元测试骨架,所以我的问题基本上是,"这样可以,便携且安全吗?"
我想看到对象.__ new __()的源定义,并决定使用这种快速方式来访问该代码.为什么python给我一个TypeError (is not a type:method),当type()告诉我它是一个类型:方法?
(1)
>>> import inspect
>>> print inspect.getsource(object.__new__)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/Cellar/python/2.7.3/Frameworks/Python.framework/Versions/2.7/lib/python2.7/inspect.py", line 701, in getsource
lines, lnum = getsourcelines(object)
File "/usr/local/Cellar/python/2.7.3/Frameworks/Python.framework/Versions/2.7/lib/python2.7/inspect.py", line 690, in getsourcelines
lines, lnum = findsource(object)
File "/usr/local/Cellar/python/2.7.3/Frameworks/Python.framework/Versions/2.7/lib/python2.7/inspect.py", line 526, in findsource
file = getfile(object)
File "/usr/local/Cellar/python/2.7.3/Frameworks/Python.framework/Versions/2.7/lib/python2.7/inspect.py", line 420, in getfile
'function, traceback, frame, or code object'.format(object))
TypeError: <built-in method __new__ of type object at 0x10a2d9410> is …Run Code Online (Sandbox Code Playgroud) 考虑:
function Panda() {
this.weight = 100;
return [1,2];
}
console.log(new Panda());Run Code Online (Sandbox Code Playgroud)
当我们使用newkeyword(new Panda())实例化时,它将返回:[1,2]
没有return语句,它返回: { weight: 100 }
function Panda() {
this.weight = 100;
}
console.log(new Panda());Run Code Online (Sandbox Code Playgroud)
使用返回语句,如:return "Hello",它返回{ weight: 100 }
function Panda() {
this.weight = 100;
return "Hello";
}
console.log(new Panda());Run Code Online (Sandbox Code Playgroud)
为什么这样做?因为它必须是一个对象吗?
我正在编写一个C++库,其中包含许多我希望显式实例化并导出多个类型参数的函数模板.在我的具体情况,我有很多的,我想单独实例化和编译数值函数模板float,double和long double.他们看起来像这样:
template <typename T>
T calculate_a(T x) { ... }
template <typename T>
T calculate_b(T x, T y) { ... }
// ...
Run Code Online (Sandbox Code Playgroud)
如果我有M个函数模板和N个底层类型,那么我有M*N显式实例化来输出.是否可以更简洁地编写这些实例?
我目前的解决方案是使用预处理器宏来执行给定类型的所有实例化:
#define EXPLICITLY_INSTANTIATE(T) \
template T calculate_a<T>(T x); \
template T calculate_b<T>(T x, T y); \
// ...
EXPLICITLY_INSTANTIATE(float);
EXPLICITLY_INSTANTIATE(double);
EXPLICITLY_INSTANTIATE(long double);
Run Code Online (Sandbox Code Playgroud)
但是,这不是最理想的,因为它要求我单独维护每个函数模板签名的另一个副本.另外,如果我想在多个翻译单元中执行此操作,那么我需要单独维护每个翻译单元中的基础类型列表.(假设C++ 2a添加了long long double我想要支持的类型;我必须添加EXPLICITLY_INSTANTIATE(long long double);到每个文件.)
另一种可能的方法是将我的所有函数收集到(仅限静态)模板类中:
template <typename T>
class calculate {
T a(T x) { ... }
T b(T x, T …Run Code Online (Sandbox Code Playgroud) instantiation ×10
c++ ×4
java ×2
oop ×2
python ×2
.net ×1
c# ×1
class ×1
class-method ×1
codeigniter ×1
datacontext ×1
dll ×1
interface ×1
javascript ×1
mvvm ×1
object ×1
paradigms ×1
php ×1
podofo ×1
templates ×1
variables ×1
wpf ×1