0
如何修改附加到某個Type
的TypeAttributes
?如何更改類型的屬性?
我想修改一個類型並通過應用TypeAttributes.Abstract
標誌將其抽象化,我該怎麼做?我確定我需要在某個地方調用CLR,但是我無法追蹤它從哪裏得到這個信息,它似乎是一個無休止的分層方法調用其他方法的系統。
如何修改附加到某個Type
的TypeAttributes
?如何更改類型的屬性?
我想修改一個類型並通過應用TypeAttributes.Abstract
標誌將其抽象化,我該怎麼做?我確定我需要在某個地方調用CLR,但是我無法追蹤它從哪裏得到這個信息,它似乎是一個無休止的分層方法調用其他方法的系統。
您可以使用庫(如Mono.Cecil)以編程方式更改類型。 假設您在名爲「ExistingAssembly.dll」的程序集中有名爲「Test」的類,並且希望將類「Test」變成抽象類。 你現在需要做的是:
void Main(){
//This is the existing assembly containing the type that you wish to modify
var assemblyFile = @"C:\temp\ExistingAssembly.dll";
var ass = Mono.Cecil.AssemblyDefinition.ReadAssembly(assemblyFile);
var type = ass.MainModule.GetTypes().First(t => t.Name == "Test");
//Make the type an Abstract type (class)
type.IsAbstract = true;
//Finally save the modified assembly into a new file
ass.Write(@"C:\temp\ModifiedAssembly.dll");
//The type "Test" in the above "ModifiedAssembly.dll" is now an abstract class.
}
// This is the Type that you wish to turn into an Abstract Class
public class Test {
public string DummyMethod(){
return "Dummy Return";
}
}
您可以從這裏得到的Mono.Cecil能組件(的NuGet): https://www.nuget.org/packages/Mono.Cecil/
要修改現有的類型是一個有趣的慾望...什麼是你如果你能分享它的最終目標? –
據我所知,你不能修改現有的類型。你可以發出一個新的類型,但它可以複製現有的類型,但可能會非常複雜。你爲什麼想要這樣做呢? – poke
@Alexei我需要防止某種類型在任何情況下被實例化。 – AlphaModder