我正在使用一些代码,我有2个类,逻辑和代码非常相似.我protected async void LoadDataAsync()
在这两个课上都有方法.
目前我正在重构它并考虑将共享逻辑移动到基类.
是否可以virtual async
在基类上使用方法并在派生类上覆盖它?
它有什么问题吗?
我的代码看起来像这样:
public class Base
{
protected virtual async void LoadDataAsync() {}
}
public class Derived : Base
{
protected override async void LoadDataAsync()
{
// awaiting something
}
}
Run Code Online (Sandbox Code Playgroud)
已经提出类似(但不相同)的问题.
我有这个代码:
import { Subject } from 'rxjs/Subject';
Run Code Online (Sandbox Code Playgroud)
导入后,我收到错误
rxjs/Subject"没有导出成员'主题'.
我无法解决这个问题.
有人可以提出解决方案吗?
我有一个新的.Net 4.5.2(检查这是目标框架)Web API应用程序(在VS 2015中).我已经引用了System.Net.Http
,你可以看到版本是4.0.0.0:
在我的过滤器/属性中,我试图引用命名空间中的HttpRequestMessage
哪个System.Net.Http
(我在文件的顶部有正确的使用),但我得到的消息是
类型'HttpRequestMessage'在未引用的程序集中定义.您必须添加对程序集'System.Net.Http,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'的引用
虽然我不能引用该类,但我可以在Object Exploerer中浏览它(我假设它使用.dll旁边的同名.xml文件).
我试过(编辑:以及通常重启VS和重建等):
update-package -reinstall -ignoreDependencies
[编辑:解决方案:
好的,我创建了一些新的VS Web API项目(和解决方案),看看我是否可以重现这个问题.最后,我创建了一个新的"Filters"文件夹,Filter
在那里创建了一个新类,复制了我的简化原文的内容,并且HttpRequestMessage
被认可了.同样的事情反过来(我的过滤器最初是在App_Code文件夹中创建的)它仍在工作.我想也许有一个看不见的人提到了一个System.Net.Http
在工作中投掷扳手的老人,尽管我可能已经注释掉了调用它的代码,不知何故它被记住了.这只是猜测.但无论如何,把它削减到最近的骨头并从那里开始是导致解决方案的最终方法.
有没有人设法找到一种解决方法/方法来将一个文件或多个文件或文本动态编译为 .Net Core (2.1) 中的 .dll?
var csProvider = CodeDomProvider.CreateProvider("CSharp");
CompilerResults compilerResults = csProvider.CompileAssemblyFromFile(options, files);
Run Code Online (Sandbox Code Playgroud)
导致 PlatformNotSupportedException 并且似乎 CodeDom 在 .Net Core 中的用途非常有限。查看类似的抱怨并比较.Net Core 2.1与.Net Framework 4.7.2中 System.CodeDom.Compiler 的视图。
我们需要能够在现场编写和动态编译自定义代码。我有一种动态加载任何结果 .dll 的方法,但我只需要首先能够获取该 .dll。
目前我能看到的唯一解决方法是创建一个 .Net Framework api/service 来执行此操作。是这里唯一放弃 .Net Core 并转到 .Net Framework 的其他解决方案吗?
注意:我想在代码库中动态执行此操作。因此,“是否可以使用 .net 核心 Roslyn 编译器编译单个 C# 代码文件?”的解决方案 不相关,因为它指出:“要直接调用 Roslyn 编译器,必须使用命令行驱动程序”,这会使我完全走上错误的道路。但是“如何以编程方式使用 Roslyn 编译 C# 文件?” 如果我知道这就是我想要做的,我会提供解决方案。
@Sami Kahmonem 提供的链接到Joel Martinez 在 .Net Core 1 中的解决方案是我用来解决这个问题的。
通常我只是使用 gridReady 事件,获取 api 并调用 sizeColumnsToFit()。
export class MyGridApplicationComponent {
private gridOptions: GridOptions;
private showGrid2: false;
constructor() {
this.gridOptions = <GridOptions>{
onGridReady: this.gridReady.bind(),
....
};
}
gridReady(params) {
params.api.sizeColumnsToFit();
}
....
Run Code Online (Sandbox Code Playgroud)
但是,我有一个位于隐藏选项卡中的网格,因此当调用 gridReady 事件时,宽度为 0(在控制台中获取消息:“尝试调用 sizeColumnsToFit() 但网格返回时宽度为零,也许网格在屏幕上还不可见?”)。
<h2>Grid only visible after button click</h2>
<button (click)="showGrid2 = true;">Show grid</button><br/><br/>
<div style="width: 100%;" [hidden]="!showGrid2">
<ag-grid-angular #agGrid2 style="width: 100%; height: 200px;" class="ag-theme-fresh" [gridOptions]="gridOptions">
</ag-grid-angular>
</div>
Run Code Online (Sandbox Code Playgroud)
当 ag-grid 变得可见时,是否有一个我可以挂钩的事件,以便我可以调整其大小/适合它?我尝试了一些模糊相关的事件(gridSizeChanged、firstDataRendered、columnVisible、columnResized)但无济于事。
[编辑]我尝试对下面的@antirealm建议进行修改(查看父div上的 *ngIf 是否有所作为),这对我的问题(过度)简化版本有效:请参阅StackBlitz repro。
这都是在嵌套选项卡组件的上下文中,其中 ag-grid 不在第一个选项卡上。我尝试在包含嵌套选项卡内容的 div …
c# ×3
angular ×2
.net ×1
.net-core ×1
ag-grid ×1
async-await ×1
asynchronous ×1
c#-5.0 ×1
compilation ×1
dynamic ×1
javascript ×1
rxjs ×1