我可以像在Java中一样在C#/ .net中创建抽象类的实例吗?
附加信息
我想我们很多人都不懂我的意思?所以,在java中,我可以像这样创建抽象类:
简单的抽象类:
/**
* @author jitm
* @version 0.1
*/
public abstract class TestAbstract
{
public abstract void toDoSmth();
}
Run Code Online (Sandbox Code Playgroud)
代码我在哪里创建抽象类的实例
/**
* @author jitm
* @version 0.1
*/
public class Main {
public static void main(String[] args) {
TestAbstract testAbstract = new TestAbstract() {
@Override
public void toDoSmth() {
System.out.println("Call method toDoSmth");
}
};
}
}
Run Code Online (Sandbox Code Playgroud)
我可以用c#做这样的事吗?
我想构建一个具有函数的类,这些函数可能会抛出我想要在使用它时捕获的异常.我从标准异常类继承my_exception.我实现了what()函数,以便它返回一个存储在私有字符串变量中的字符串
我认为最好将异常定义为嵌套类,就像在iosream库中使用ios_base :: failure一样.
我不太确定的是,我应该在哪里以及如何定义my_excpetion的对象.我希望我能看到iostream功能的内部代码,看看他们是如何做到的.我考虑了几个选项:
对于异常的每个原因,我可以定义my_exception的静态实例,使用构造函数获取字符串并将其保存到我的私有字符串指针.
对于异常的每个原因,我可以定义另一个继承自my_exception的类,并实现作为返回常量字符串的函数(原因).我可以保存每个异常子类的实例,或抛出类型.顺便说一句,我们什么时候通常抛出类型而不是实例?
我想这是错的:每次我想抛出一个异常,用一个获取字符串的构造函数创建一个新的my_exception.这是用Java完成的,但据我所知,它在C++中会有问题,因为异常应该在某处删除.对?
我认为第一个是正确的,是吗?有更多标准选项吗?
非常感谢你!
我有一个有趣的问题.我需要动态包装静态类.即返回一个非静态实例给我的调用者.例如:
public object CreateInstance(string className) {
Type t = assembly.GetType(className);
if (IsStatic(t)) {
return CreateStaticWrapper(t);
} else {
return Activator.CreateInstance(t);
}
}
Run Code Online (Sandbox Code Playgroud)
所以我需要的是如何实现的指针CreateStaticWrapper.
注意:遗憾的是我无法使用Dynamic对象.
那么我的选择是什么?我不是那么热衷于学习IL一代吗?如果IL生成(Reflection.Emit,或者现在还有其他方法吗?)是什么方法,那么有没有人有指针?
编辑:重要的是要注意我可以返回代表词典.所以我可以使用Delegate.CreateDelegate这个,但我似乎无法解决如何处理重载方法和通用方法.
Edit2:另一种选择是使用Emit将空构造函数注入到类型中,再次指向任何指针?甚至可以在标记为静态的类型上进行此操作吗?static关键字是否会进入IL?
Edit3:对于一些上下文,我将它传递给javascript环境,请参阅: 我的项目.所以我希望能够(在JavaScript中):
var fileHelper = .create('System.IO.File');
if (fileHelper.Exists(fileName)) { fileHelper.Delete(fileName); }
Run Code Online (Sandbox Code Playgroud)
谢谢大家.
我如何测试对象是D中特定类的实例?
类似于Javascript instanceof关键字的东西?
如何查看我的应用运行的平台,AWS EC2实例,Azure角色实例和非云系统?现在我这样做:
if(isAzure())
{
//run in Azure role instance
}
else if(isAWS())
{
//run in AWS EC2 instance
}
else
{
//run in the non-cloud system
}
//checked whether it runs in AWS EC2 instance or not.
bool isAWS()
{
string url = "http://instance-data";
try
{
WebRequest req = WebRequest.Create(url);
req.GetResponse();
return true;
}
catch
{
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
但是当我的应用程序在非云系统中运行时,我遇到了一个问题,例如本地Windows系统.执行isAWS()方法时速度非常慢.代码'req.GetResponse()'需要很长时间.所以我想知道如何处理它?请帮我!提前致谢.
我正在尝试创建一个包含CKEditor实例的Bootstrap模式,但是存在很多问题......
所以基本上这些字段都没有用,它们看起来不像,但我无法与它们互动.有没有人能解决这种奇怪的行为?
我想问一个问题,什么时候使用静态变量/方法或在Java中的其他情况下实例变量/方法是有利的?
我知道这取决于某些情况(比如将util-classes编程为静态方法),但我们可以声明类似于一般策略的东西吗?
尝试使用非Laravel包:https://packagist.org/packages/luceos/on-app
编辑composer.json来要求它并做作曲家安装,更新,然后dump-autoload -o.
这个包需要初始化:vendor/luceos/on-app/src/OnAppInit.php
哪个不是一个类,只有一个方法.但是当我尝试在服务提供者中绑定它时似乎没有加载它.云的版本是在OnAppInit.php中启动的,但是没有这样做,所以当然会出现"不支持版本"的错误.
我知道我错过了一个小细节,却找不到它.也许在服务提供商?
composer.json
"require": {
"luceos/on-app": "~3.5"
"autoload": {
"psr-4": {
"Luceos\\OnApp\\": "vendor/luceos/on-app/src/"
Run Code Online (Sandbox Code Playgroud)
配置/ app.php
'providers' => [
'App\Providers\OnAppServiceProvider',
Run Code Online (Sandbox Code Playgroud)
应用程序/提供者/ OnAppServiceProvider.php
public function register()
{
$this->app->bind('onapp', function($app)
{
$hostname = 'http://cloud';
$username = 'email@foo.com';
$password = 'api_key';
$factory = new \OnApp_Factory($hostname, $username, $password);
$setting = $factory->factory('Settings')->getList();
return $setting;
});
}
Run Code Online (Sandbox Code Playgroud)
看起来像那里... vendor/composer/autoload_files.php
$vendorDir . '/luceos/on-app/src/OnAppInit.php',
Run Code Online (Sandbox Code Playgroud)
供应商/作曲家/ autoload_psr4.php
'Luceos\\OnApp\\' => array($vendorDir . '/luceos/on-app/src'),
Run Code Online (Sandbox Code Playgroud) 假设我有一个有100个孩子的基类:
class Base {
virtual void feed();
...
};
class Child1 : public Base {
void feed(); //specific procedure for feeding Child1
...
};
...
class Child100 : public Base {
void feed(); //specific procedure for feeding Child100
...
};
Run Code Online (Sandbox Code Playgroud)
在运行时,我想读取一个文件,其中包含要创建和提供的子项.假设我已经读过文件,字符串"names"的向量包含子类的名称(即Child1,Child4,Child99).现在,我将遍历这些字符串,创建特定子项的实例,并使用其特定的提供过程来提供它:
vector<Base *> children;
for (vector<string>::iterator it = names.begin(); it != names.end(); ++it) {
Base * child = convert_string_to_instance(*it)
child->feed()
children.push_back(child);
}
Run Code Online (Sandbox Code Playgroud)
我如何创建函数convert_string_to_instance(),这样如果它接受字符串"Child1"它返回一个"new Child1",如果字符串参数是"Child4"它返回一个"new Child4",等等
<class C *> convert_string_to_instance(string inName) {
// magic happens
return new C; // C = …Run Code Online (Sandbox Code Playgroud) php 5.3+
很抱歉这个问题很长,但我想完全了解这一点.
我知道我不能从静态方法中调用非静态相同类方法,而不将类实例化为对象.
class Person
{
private $people_array;
function data_all_get()
{ // touch database, return array of people
$this->people_array = // etc dbquery results
}
static function showPeople()
{ // call class method
$people_data = $this->data_all_get();
// Fatal error: Using $this when not in object context
}
} // end class Person
Run Code Online (Sandbox Code Playgroud)
从搜索SO,我发现了一些有趣的方法,但想知道每种方法如何影响代码环境.
我的问题如下:
我可以将类实例化为静态方法中的对象,以获得对非静态方法的访问
static function showPeople()
{ // instantiate as object
$person = New Person();
// call class method
$people_data = $this->data_all_get();
}
Run Code Online (Sandbox Code Playgroud)
Q1 - 这会导致什么问题? 在我的情况下,该类没有构造函数,因此该实例不会影响其他类方法或变量.在脚本执行期间,这个新对象会占用内存中的一小块空间吗?似乎不太糟糕...... …